因为自己接触的东西很多,公司事情很多,很多东西需要做记录,要不然就一直学一直忘;
拼接运算符{ }
字面上就很好理解,用于将多个信号拼接起来,形成一个新的信号;
我这里只说使用结果,不多做解释;
reg [7:0] Value;
...
assign Value <= {0, Value[7:1]};
上面这个逻辑,可以实现 寄存器Value右移1位,最高位由 “0”代替;
假设Value的值为 1111_1111;
第一次运算
Value <= {0, Value [7:1]};
Value 右移一位,然后0与右移后的Value拼接, 得到的值: 0111_1111
第二次运算
Value <= {0, Value [7:1]};
Value 右移一位,然后0与右移后的Value拼接, 得到的值: 0011_1111;
第三次运算
Value <= {0, Value [7:1]};
Value 右移一位,然后0与右移后的Value拼接, 得到的值: 0001_1111;
此处不继续运算,说到这里,基本也都清楚了!
参考之前写过的实例,可能更好理解,下面这个逻辑,通过位拼接运算,将值进行操作,得到新的值,
而且通过代码很好理解,外部信号进入到这个逻辑,会自动进行拼接操作,实现数据整合。
module gray
(
input clk,
input rst_n,
input [7:0] data_in,
output reg [31:0] data_out,
output reg clk1x_en
);
***
reg [31:0] shift_reg;
always @ (posedge clk,negedge rst_n)
begin
if(!rst_n)
shift_reg <= 32'b0;
else
shift_reg <= {shift_reg[23:0],data_in};
end
***
endmodule