我试图在verilog中移位一个值,使得替换的位是1而不是0。即我想做0001 << 1
,以便0011
代替0010
答案 0 :(得分:4)
命令&#39;&lt;&lt;&#你使用,为剩余的位添加零。 你可以这样做:
假设您有4位变量(如您的示例),称为A。
A = 4'b0000;
A = {A[2:0], 1'b1};
使用连接,您可以放置一个而不是零。
或者您可以使用&#39;或&#39;这个问题的功能:
A = (A << 1) | 4'b0001;
答案 1 :(得分:0)
你能做的事情如下:
(x << 1) + 1
或
(x << 1) | 1
答案 2 :(得分:0)
要使移位工作最多为位数,以下示例预先填充输入1的移位,然后选择MSB:
localparam WIDTH = 4;
// Create temp with 1's as padding
wire [WIDTH*2 -1 :0] pad = {A, {4{1'b1}}};
wire [WIDTH*2 -1 :0] shift = pad << 1;
// Select MSB with 1's shifted in
wire [WIDTH-1 : 0] result = shift[WIDTH*2 -1 : WIDTH];
答案 3 :(得分:0)
你可以这样做:
module ones_shift #(log2_width=2) (input [(2**log2_width)-1:0] A, input [log2_width:0] SHIFT, output [(2**log2_width)-1:0] As);
wire [(2**log2_width)-1:0] Ai, Ais;
assign Ai = ~A;
assign Ais = Ai << SHIFT;
assign As = ~Ais;
endmodule
即BITWISE INVERT - &gt; LOGICAL SHIFT LEFT - &gt; BITWISE INVERT
这适用于任何有效的班次值。
答案 4 :(得分:0)
我们可以使用
a =(1'b1 <<计数)-1;
将计数分配为一个值,该值等于要从LSB填充的1的个数。
答案 5 :(得分:0)
differentFunction(myJSONObject as JSONType_2)
答案 6 :(得分:0)
x |= x<<1; // 假设 x 从 1 开始