当前位置:文档之家› 四位超前进位加法器资料

四位超前进位加法器资料


and(k[1],p[1],g[0]); and(k[2],k[1],c_in); or(c[1],g[1],k[1],k[2]); and(k[3],p[2],g[1]); and(k[4],k[3],g[0]); and(k[5],k[4],c_in); or(c[2],g[2],k[3],k[4],k[5]); and(k[6],p[3],g[2]); and(k[7],k[6],g[1]); and(k[8],k[7],g[0]); and(k[9],k[8],c_in); or(c_out,g[3],k[6],k[7],k[8],k[9]); xor(sum[0],p[0],c_in); xor(sum[1],p[1],c[0]); xor(sum[2],p[2],c[1]); xor(sum[3],p[3],c[2]); endmodule 测试程序: module adder_th; reg [3:0] a,b; reg c_in; wire [3:0] sum;
3.1 实验内容 编写四位超前进位加法器程序及测试程序 3.2 本次所实现的功能描述 输入两个四位二进制数和一个二进制数进位输入,输出一个二进 制结果和一个二进制数进位输出 3.3 具体步骤如下: 1.打开 Modelsim 软件,建立工程,键入工程名后,再在下面路 径添加一个自己的文件夹。 在工程下建立两个文件分别为功能模块文 件和测试激励模块文件。
2.双击模块文件进入文件后编写代码。 3.保存文件,编译,如果程序出错对程序则进行修改。然后再编 译,编译成功后进行仿真。
4.单击运行并添加波形,观察仿真结果是否符合事先的设计。若 不符合,则继续修改代码直至符合事先的设计要求。
源程序: module add_4(a,b,c_in,c_out,sum); input [3:0] a,b; input c_in; output [3:0] sum; output c_out; wire [2:0] c; wire [3:0] p; wire [3:0] g; wire [9:0] k; xor(p[0],a[0],b[0]); xo xor(p[3],a[3],b[3]); and(g[0],a[0],b[0]); and(g[1],a[1],b[1]); and(g[2],a[2],b[2]); and(g[3],a[3],b[3]); and(k[0],p[0],c_in); or(c[0],k[0],g[0]);
wire c_out; integer i,j; add_4 f0(.a(a),.b(b),.c_in(c_in),.sum(sum),.c_out(c_out)); always #5 c_in=~c_in; initial begin
a=4'b0; b=4'b0; c_in=1'b0; i=0; j=0; end initial begin for(i=0;i<16;i=i+1)
四位超前进位加法器
1. 实验目的
练习在 Modesim 下编写 Verilog 程序,熟悉 Modelsim 运行过程, 并学会用 Verilog 语言编写一个四位超前进位加法器。
2. 实验要求
编写一个四位的具有超前进位功能的程序实现超前进位加法;并 且编写一测试程序来测试该模块。
3. 实验内容及步骤
_
_
_
4. 实验总结
这是第二次用 Verilog 做实验,在使用 Modesim 方面还不熟练,在经过一 定的练习之后终于可以简单的使用它了。这个程序对于我来说有一定的难度, 虽然数字电路这门课学过超前进位加法器的原理, 但要真正的用 Verilog 语言 实现还是不简单的,我也是通过查找资料才实现的。注意测试激励的输出申 明成了 reg 类型的就不行,后来改成了 wire 类型才对!还要注意激励模块与 测试模块的连接顺序,使用命名方式连接。
for(j=0;j<16;j=j+1) begin #5 a=i; b=j; end
end initial
begin $monitor($time,"a=%d,b=%d,c_in=%b
sum=%d,c_out=%b",a,b,c_in,sum,c_out); end endmodule 测试输出结果: 测试波形:
相关主题