求助:verilog中怎么对信号延时输出
数据存入FIFO或RAM或reg,计数控制输出的时能
延时时间不固定,或者当有读使能才能输出,就用fifo,要是固定延迟,就简单的delay就好了
always @ (posedge clk) begin
d1 <= d;
d2 <= d1;
.......
dout <= dn;
end
移位寄存器啊
always @(posedge clk)
shifter <= {shifter[6:0], din};
assign dout = shifter[7];
你可以用 cnt > 8 的時候輸出就好,然後 cnt 停止計數。要延遲,加上 FIFO。
嗯,我也想到这个,可是我要延时的信号有二十几个,有没有什么其他的方法呢
这边延迟要可变,而且最大有四十多延迟。
用移位寄存器可以控制延迟数量吗
我这边有二十几个数要延迟。要写二十几个fifo,有没有其他什么方法呢?
如果是延迟在仿真过程中要随着变化,就用fifo
如果只是不同模块例化的时候需要不一样的延迟就加个parameter DLY_NUM
然后
reg [data_width-1:0] data_array [DLY_NUM-1:0]
always @()
data_array <= {data_array [DLY_NUM-2:0], data_in}
assign data_out = data_array [DLY_NUM-1]
用fifo 也不需要用20多个啊,只要在你第一个写信号有效之后,等20几个延迟,产生读信号就可以了
fifo不是单输入吗,我意思我有 data1,data2....这些总共二十几个信号
另外,我这边控制延迟数量的信号是外部输入的,这样必须用fifo吗?
我这信号有16位。
双端口RAM,读使能信号及读地址根据延迟控制就行
当然,还有其他多种方法