首页 > 解决方案 > Verilog - 使用 1 位输入进行屏蔽

问题描述

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

reg [N-1:0] bit_list;

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

bit_list<=bit_list<<1 || X

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

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

标签: verilog

解决方案


您可以使用口罩。(顺便说一句||,逻辑或,你想要|一个按位或)

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);

推荐阅读