Galois模式LFSR与256位向量异或输出出现'X'未知态问题咨询
异常原因
你遇到的未知态X是信号多驱动冲突导致的,根因在Testbench代码里:
- 你先执行了
rc_out <= (others => '0');,这行并行赋值语句会给rc_out的所有256个bit持续驱动为0 - 后续你又单独给
rc_out的32个特定bit(16个接RC0异或结果、16个接RC1异或结果)赋值了异或运算的输出
对于这32个被二次赋值的bit来说,同时存在两个驱动源:一个是恒定的0,一个是异或运算的输出。当异或输出为1时,两个驱动源电平冲突,std_logic类型的解析规则就会输出未知态X,和你观察到的异常现象完全吻合。
修复方案
删除Testbench中rc_out <= (others => '0');这行代码,再补充对剩余未参与异或的224个bit的赋值,直接将其对应srb_out的原值输出即可,示例如下:
-- 删掉rc_out <= (others => '0'); 这行 -- 原有异或赋值语句保留 -- 补充剩余位赋值 loop_others: for i in 0 to 255 generate if (i mod 16 = 0) or (i mod 16 = 8) generate -- 这部分位已经被异或逻辑覆盖,不需要额外处理 else generate rc_out(i) <= srb_out(i); end generate; end generate;
你也可以直接启用注释掉的loop generate逻辑实现异或赋值,再补充上述剩余位的赋值即可。
内容的提问来源于stack exchange,提问作者Pantelos Papado
相关产品推荐
相关产品推荐

