verilog位移1

时间:2016-03-17 18:58:34

标签: verilog system-verilog

我试图在verilog中移位一个值,使得替换的位是1而不是0。即我想做0001 << 1,以便0011代替0010

7 个答案:

答案 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

这适用于任何有效的班次值。

http://www.edaplayground.com/x/YWK

答案 4 :(得分:0)

我们可以使用

a =(1'b1 <<计数)-1;

将计数分配为一个值,该值等于要从LSB填充的1的个数。

答案 5 :(得分:0)

differentFunction(myJSONObject as JSONType_2)

答案 6 :(得分:0)

x |= x<<1; // 假设 x 从 1 开始

相关问题