HDL 4.1.1 Fixing bugs in mux2

1.感受

从前面的做题中学到了门语言、矢量,也看到了其灵活运用,我的确有眼前一亮的感觉,但这些知识点和我学的MATLAB相同,我只学会看懂代码,但怎么成为master?怎么解决问题?

比如知道了if、case,知道了加法器的原理和代码,但为何要用这些语言?我脑子里主动分析过这些语言吗。就像背单词,背了不一定会表达,因此我现在进一步直接学习4.Verification: Reading Simulations

2.正文

2.1 2-1复用器:

module top_module( 
    input a, b, sel,
    output out ); 
    assign out = sel ? a : b;
endmodule

2.2 源代码

module top_module (
    input sel,
    input [7:0] a,
    input [7:0] b,
    output out  );

    assign out = (~sel & a) | (sel & b);

endmodule

2.3 警告

  • 显示输入输出大小没有匹配上,修改了[7:0] out,修改后的时序图:

  • 从波形图可以看到,当sel为高电平时,参考输出选择a信号(aa),但实际输出却选择了ba(可能是ba的组合)。为什么在亚稳态时输出异常?

2.4 答案

module top_module (
    input sel,
    input [7:0] a,
    input [7:0] b,
    output [7:0] out  );
    
    assign out = sel? a : b;
endmodule

2.5 亚稳态的解释(来源豆包AI)

如果a是8位,当执行 sel & a 时,Verilog 会自动将 sel 扩展为 8 位:

  • 如果 sel = 1,扩展后为 8'b11111111
  • 如果 sel = 0,扩展后为 8'b00000000

亚稳态是指触发器无法在有效时间内稳定到逻辑 0 或 1 的状态。此时触发器的输出会在 0 和 1 之间震荡,最终可能稳定到任意值。

  • 当 sel 处于亚稳态时(例如电压在阈值附近,既不是 0 也不是 1),硬件会将其解释为部分比特为 0,部分比特为 1。例如:
  • sel 可能被解释为 8'b01010101(假设亚稳态导致每两位交替为 0 和 1)

因此在矢量计算中,位运算要注意参数的长度匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值