【问题标题】:Verilog - masking using 1 bit inputVerilog - 使用 1 位输入进行屏蔽
【发布时间】:2020-01-08 05:43:05
【问题描述】:

我有一种情况,我不确定存在什么可以解决它的正确语法。 在我的代码中,我有

reg [N-1:0] bit_list;

还有另一个变量 n,它计算我在 bit_list 中插入了多少位。 偶尔根据输入 - 我需要在单个 posedge 期间将 bit_list 移动 1,然后将 bit_list[N-n] 更改为我的输入。我的想法是我可以做到以下几点

bit_list<=bit_list<<1 || X

X 应该被替换为一些 N-1 长向量,除了 N-n 之外的所有位都为零。问题是我不知道描述这样的向量 - 因此我的问题。 我确信我的问题很简单,可以通过各种简单的方式来解决,所以任何解决我问题的方法都可以。

很抱歉,如果我的问题是新手,因为我还是新手,当然会得到帮助。

【问题讨论】:

    标签: verilog


    【解决方案1】:

    您可以使用面具。 (顺便说一句,|| 是逻辑或,你想要 | 按位或)

    reg [N-1:0] mask;
    
    mask = ({ {N{1'b0}},1'b0}) << n) - 1; // the concat is needed in case N > 32
    
    bit_list<=((bit_list<<1) & ~mask) | (X & mask);
    

    【讨论】:

    • 谢谢。修正错别字
    • 抱歉保留 cmets:你的面具现在总是全都是。它是 N*2 个零,-1。
    • 我正在写自己的答案,但被放弃了,因为我的解决方案也是一个单独的掩码。我认为我的是 {N{1'b0,1'b1}}
    • 我尝试了此代码的变体,因此它符合我的意图,但出现了问题。我的代码是:bit_list
    • 如果您硬编码位大小(64'b1 &lt;&lt; n)-1 将适用于任何掩码大小>=64 位,则可以简化掩码
    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多