微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求助:verilog中怎么对信号延时输出

求助:verilog中怎么对信号延时输出

时间:10-02 整理:3721RD 点击:
求助:对一个16位的信号进行延迟,我在编写程序的时候用cnt计数,假如延时8个时钟周期,cnt计数到8时输出信号,可是这样产生的结果是每过8个时钟才有一个输出,怎么产生连续的延迟输出呢?

数据存入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,读使能信号及读地址根据延迟控制就行



   当然,还有其他多种方法

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top