关于verilog中拼接符的使用疑问,求大神指点
时间:10-02
整理:3721RD
点击:
verilog编程可以利用拼接符进行移位操作吗?eg: assign fcheck={rcheck,fin};//其中fcheck和rcheck都是4位的,fin是一位的,仿真结果是{rcheck,fin}的最高位去掉了赋给 fcheck了,但有一个问题就是 fcheck的变化时受fin异步控制的,没有一个时钟读一次fin的值,是不是可以将这句改成用时钟沿控制以为赋值而不用asign,另外这样使用拼接符是可以综合的吗? 要是不可以综合的话是不是可以用ram将fin串口的数据读进去比较可靠?可是具体的通过ram将数据串行写到12位的缓冲寄存器temp的具体程序怎么写呀?小女子菜鸟一只,望大神赐教,不甚感激!
如果你确实是想你这样做可以的, 语法也没有问题, 也是可以综合的。 但是有风险的是组合逻辑容易引起毛刺, 推荐用时钟沿控制位赋值。 至于将RAM 的数据穿行写到12位缓冲寄存器中, 你可以用SPI将数据读出来, 或者就是用计数器产生地址,将每一个地址的数据读读出来看看更方便也更直观, 推荐用读地址数据的方法来
reg fcheck_tmp;
reg fcheck;
always @ ( fin ) fcheck_tmp = rcheck;
always @ ( posedge clk ) fcheck <= fcheck_tmp;
我猜你有个串行的数据源输入(信号叫fin),你想每进来4个bit就作为1组(你叫做fcheck)存入sram,是这样么?然后这个sram存入一定量以后可以进行访问或者其他校验操作
(随手写的,没仔细看有没问题)
e.g:
module check(clk,resetn,din);
input clk;
input resetn;
input din;
reg [3:0] fcheck;
always(posedege clk or negedge resetn);
begin
if(!resetn) fcheck <= 4'h0;
else fcheck <={fcheck[2:0],din};//left-shift
end
endmodule
