【问题标题】:Combine 1 bit inputs into single register appropriately将 1 位输入适当地组合到单个寄存器中
【发布时间】:2019-01-11 19:14:25
【问题描述】:

我正在用 verilog 编程,我有一系列 1 位输入 - 比如说:

input SIGNALP,
input SIGNAL1,
input SIGNAL2,
input SIGNAL3,
input SIGNAL4,
input SIGNAL5,
input SIGNAL6,
input SIGNAL7

然后我想将这些位组合成一个8位寄存器,其中第一位是奇偶校验位(SIGNALP),第二位是SIGNAL1,第二位是SIGNAL2,等等。我怎么能做这个?例如,添加所有这些是行不通的,因为它无法识别这些的位置值。我这样做的原因是因为并行数据比串行数据快。任何帮助,将不胜感激。谢谢!

【问题讨论】:

    标签: verilog fpga bit parity


    【解决方案1】:

    只需将其设为单个向量:

     input [7:0] SIGNAL;
    

    如果您希望代码在引用奇偶校验位时看起来更好,您可以使用模块的参数来引用它(简短示例):

    module parallel(input [7:0] SIGNAL,
                    ...);
    
      parameter PARITYBIT = 0;
      ...
    
      always @(*) begin
         p = SIGNAL[PARITYBIT];
         ...
    

    不幸的是,范围的其余部分(即[7:1])更难以干净地引用,尽管您可以使用[b:+w] 语法。但是由于您刚刚使用SIGNAL1SIGNAL2 等,您现在可以使用SIGNAL[1]SIGNAL[2] 等。

    【讨论】:

    • 我不太确定我是否理解这一点 - SIGNAL 向量中的每个位如何映射到单个数据位所在的相应引脚?谢谢你的回答!
    • 是的,如果你正确地实例化了模块。之前你有parallel name(.SIGNAL7(x), .SIGNAL6(y) ...); 这样的东西,现在你有parallel name(.SIGNAL({x, y, ...});
    【解决方案2】:

    您似乎想将这些位连接到一个新寄存器中

    wire [0:7] my_new_register;
    assign my_new_register = {SIGNALP, SIGNAL1, ... SIGNAL7}; // you fill in ...
    

    您没有指定如何将每个引脚映射到新信号中,因此您必须根据需要进行调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-14
      • 2014-11-18
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多