verilog中连续性赋值中的延时
2016-06-08 21:01
381 查看
上次遇到一个问题。写一个testbench需要移动两个时钟之间的相位。后来一想,貌似我们都是这么写clock的
always #(`P/2) clk = ~clk
我的两个时钟都是这么写,只是p不一样,那相位怎么移动呢?
于是就追究起 如何延迟赋值的问题
根据standard-2005.
对于连续赋值延时只有这一种
wire #delay_time b ;
assign a = b ;
1,在第0时刻仿真器读取b的值
2,如果b的值,与a不同,取消上一个event, 新建立event ----- 过delay_time后,将新值赋值给 a
3, 如果b值与a相同,那么维持现状
4,在这delay_time时间内,如果b继续变化。回到2或者3.
用真OO无双大神的话说,就是无code无真相
测试两个回合
先初始化a=b=ff
第一回合发生在第21ns的时刻, b=12维持了2ns (<delay_time 8ns),在第23ns时刻变成了ff。发现经过20ns(>delay_time 8ns)a的值一直是ff。
第二回合发生在第43ns时刻, b=34维持2ns,再b=ff维持2ns,再b=56(在第47ns)维持2ns。结果在第56ns (56-47=8)a=56
有code有图有真相。
所以对于我的问题可以是
这样就把clk1的相位移动了一下,形成了一个新的时钟clk2
其实还可以是用forever。效果是一样的
欢迎加入: FPGA广东交流群:162664354
FPGA开发者联盟: 485678884
always #(`P/2) clk = ~clk
我的两个时钟都是这么写,只是p不一样,那相位怎么移动呢?
于是就追究起 如何延迟赋值的问题
根据standard-2005.
对于连续赋值延时只有这一种
wire #delay_time b ;
assign a = b ;
1,在第0时刻仿真器读取b的值
2,如果b的值,与a不同,取消上一个event, 新建立event ----- 过delay_time后,将新值赋值给 a
3, 如果b值与a相同,那么维持现状
4,在这delay_time时间内,如果b继续变化。回到2或者3.
用真OO无双大神的话说,就是无code无真相
module delay_test ; //Continuous assignments check wire [7:0] #8 con_a ; reg [7:0] con_b ; assign con_a = con_b ; //********************** initial begin con_b = 0 ; #1 con_b = 8'hff ; #20 con_b = 8'h12 ; #2 con_b = 8'hff ; #20 con_b = 8'h34 ; #2 con_b = 8'hff ; #2 con_b = 8'h56 ; #20 ; end endmodule
测试两个回合
先初始化a=b=ff
第一回合发生在第21ns的时刻, b=12维持了2ns (<delay_time 8ns),在第23ns时刻变成了ff。发现经过20ns(>delay_time 8ns)a的值一直是ff。
第二回合发生在第43ns时刻, b=34维持2ns,再b=ff维持2ns,再b=56(在第47ns)维持2ns。结果在第56ns (56-47=8)a=56
有code有图有真相。
所以对于我的问题可以是
wire #Delay_time clk2 assign clk2 = clk1
这样就把clk1的相位移动了一下,形成了一个新的时钟clk2
其实还可以是用forever。效果是一样的
initial begin #Delay_time forever #(`P/2) clk2 = ~clk2 ; end
欢迎加入: FPGA广东交流群:162664354
FPGA开发者联盟: 485678884
相关文章推荐
- 第十、十一周阅读程序 继承和派生(2)
- String,一个特殊的类
- win7 64位安装redis 及Redis Desktop Manager客户端工具的使用
- apache Subversion 首页
- 梯度下降
- C++线程与网络接口技术(第二节:线程共享、安全与通知等)
- C++构造函数和析构函数
- 执行SQL语句来操作数据库
- 【好玩的计算机视觉】KNN算法手写数字识别
- hdu 1065(推公式)
- lstm
- 最大经验,人是不可改变的,尤其是主动改变(你自己不变,社会就会用刀子来要求你变)
- ubuntu 16.04 搭建lamp的苦逼经历
- Application和Page详解
- 一个简单的epoll使用例子
- innoDB源码分析--缓冲池
- 【通知.计服15】第16周实验
- NC上传拿Webshell
- lua coroutine 异步转同步
- jq设置action并且提交