裸奔的流浪者 发表于 2018-4-20 16:26:44

verilog 一个always块可否对同一寄存器延迟赋值

在一个always块里需要对同一个寄存器赋值两次,但是第二次赋值要比第一次赋值延迟一个时钟周期。有大神知道怎么实现吗?
always @(negedge signal2)
                begin
                fifo_wr_signal_middle<=1'b1;
                counter_data_out_midle<=counter_out;
      fifo_wr_signal_middle<=1'b0;                            // 需要延迟一个周期对其赋值
                end
       

smaret 发表于 2018-4-20 17:16:12

用一个计数器吧!按计数器的值来赋值fifo_wr_signal_middle

裸奔的流浪者 发表于 2018-4-20 17:38:22

smaret 发表于 2018-4-20 17:16
用一个计数器吧!按计数器的值来赋值fifo_wr_signal_middle

但是signal2和主模块不是一个时钟域,就想在一次signal触发信号下,往外发送一个时钟周期的数据。

McuPlayer 发表于 2018-4-20 17:44:31

不要想Verilog,你就想电路,如果要实现这个功能,你打算怎么用数字电路做出来

裸奔的流浪者 发表于 2018-4-20 17:51:35

McuPlayer 发表于 2018-4-20 17:44
不要想Verilog,你就想电路,如果要实现这个功能,你打算怎么用数字电路做出来 ...

谢了,正在想办法。

McuPlayer 发表于 2018-4-20 18:04:33

等你电路想好了,Verilog代码不就也出来了

get500wan 发表于 2018-4-20 22:10:17

想实现得,是fifo_wr_signal_middle这个信号,只立1个时钟周期宽的高电平吧。

get500wan 发表于 2018-4-20 22:21:40

always @(negedge clk)
begin
    if (某个条件 )
      fifo_wr_signal_middle<=1'b1;

    if (fifo_wr_signal_middle==1'b1)
         fifo_wr_signal_middle<=1'b0;
大概的意思吧,语法不是很严格。

get500wan 发表于 2018-4-20 22:21:58

本帖最后由 get500wan 于 2018-4-20 22:23 编辑

手机编辑,发重复了。

aammoo 发表于 2018-4-21 00:32:25

你这就是两个d触发器串联起来吧

裸奔的流浪者 发表于 2018-4-21 08:55:32

get500wan 发表于 2018-4-20 22:21
always @(negedge clk)
begin
    if (某个条件 )


按你的方法试一下,感觉可行的样子

裸奔的流浪者 发表于 2018-4-21 08:59:50

aammoo 发表于 2018-4-21 00:32
你这就是两个d触发器串联起来吧

第二个延迟一个周期触发,该模块不是在时钟驱动下,但是还的延迟一个时钟周期。

denike 发表于 2018-4-21 17:16:10

裸奔的流浪者 发表于 2018-4-21 08:59
第二个延迟一个周期触发,该模块不是在时钟驱动下,但是还的延迟一个时钟周期。 ...

最简单状态机

裸奔的流浪者 发表于 2018-4-22 09:08:42

denike 发表于 2018-4-21 17:16
最简单状态机

解决了,就是放到主模块状态机完成的。谢了
页: [1]
查看完整版本: verilog 一个always块可否对同一寄存器延迟赋值