为什么四位全加器的输出是高阻态呀

2019-07-15 21:10发布

这是verilog代码
module adder4 (cout, sum, ina, inb, cin);
input [3:0] ina, inb;
input cin;

output [3:0] sum;
output cout;

assign {cout, sum} = ina+inb+cin;
endmodule



这是仿真
module test_adder4;
reg [3:0] ina, inb;
reg cin;
wire [3:0] sum;
wire cout;

adder4 adder(sum, cout, ina, inb, cin);            //调用测试对象
initial
    begin
        #0  ina = 4'b0001; inb = 4'b1010; cin = 1'b0;
        #5  ina = 4'b0010; inb = 4'b1010; cin = 1'b1;
        #5  ina = 4'b0010; inb = 4'b1110; cin = 1'b0;
        #5  ina = 4'b0011; inb = 4'b1100; cin = 1'b1;
        #5  ina = 4'b0111; inb = 4'b1001; cin = 1'b0;
        #5  ina = 4'b0001; inb = 4'b1100; cin = 1'b1;
        #5  ina = 4'b0011; inb = 4'b1100; cin = 1'b0;
        #5  ina = 4'b0111; inb = 4'b1111; cin = 1'b1;
        #5 $finish;
    end

initial
begin
    $monitor("At time %t, ina(%b) + inb(%b) + cin(%b) = sum(%b) (%2d), cout(%b)",
                $time,ina, inb, cin, sum, sum, cout);
end
endmodule



在vivado2017.3 Run Behavioral Simulation下的运行结果,sum是高阻态,这是为什么呀?
捕获.PNG

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
reallmy
1楼-- · 2019-07-16 01:09
用modelsim仿真时可以的啊!我估计是assign {cout, sum} = ina+inb+cin;这句话的问题,你换个写法
wire [4:0] sum0;
assign sum0 = ina+inb+{3'd0,cin};
assign sum = sum0[3:0];
assign cout = sum0[4];
应该可以 最佳答案
stupidcoding
2楼-- · 2019-07-16 05:18
谢谢 大佬帮助
891888976
3楼-- · 2019-07-16 06:22
 精彩回答 2  元偷偷看……

一周热门 更多>