来源:http://www.cnblogs.com/oomusou/archive/2009/06/15/verilog_dly_n_clk.html

 /*
(C) OOMusou 2009 http://oomusou.cnblogs.com Filename : delay_3t.v
Compiler : NC-Verilog 5.4
Description : delay 3t method 1
Release : 06/15/2009 1.0
*/ module delay_3t (
clk,
rst_n,
d,
q
); input clk;
input rst_n;
input d;
output q; reg d_dly_1t;
reg d_dly_2t;
reg d_dly_3t; assign q = d_dly_3t; always@(posedge clk or negedge rst_n) begin
if (!rst_n) begin
d_dly_1t <= ;
d_dly_2t <= ;
d_dly_3t <= ;
end
else begin
d_dly_1t <= d;
d_dly_2t <= d_dly_1t;
d_dly_3t <= d_dly_2t;
end
end endmodule
 /*
(C) OOMusou 2009 http://oomusou.cnblogs.com Filename : delay_3t.v
Compiler : NC-Verilog 5.4
Description : delay 3t method 2
Release : 06/15/2009 1.0
*/ module delay_3t (
clk,
rst_n,
d,
q
); input clk;
input rst_n;
input d;
output q; reg d_dly_1t;
reg d_dly_2t;
reg d_dly_3t; assign q = d_dly_3t; always@(posedge clk or negedge rst_n) begin
if (!rst_n)
{d_dly_3t, d_dly_2t, d_dly_1t} <= ;
else
{d_dly_3t, d_dly_2t, d_dly_1t} <= {d_dly_2t, d_dly_1t, d};
end endmodule
 /*
(C) OOMusou 2009 http://oomusou.cnblogs.com Filename : delay_nt.v
Compiler : NC-Verilog 5.4
Description : delay 3t method 3
Release : 06/15/2009 1.0
*/ module delay_nt (
clk,
rst_n,
d,
q
); parameter n = ; input clk;
input rst_n;
input d;
output q; reg [n-:] r; assign q = r[n-]; integer i; always@(posedge clk or negedge rst_n) begin
if (!rst_n)
r <= ;
else begin
for(i=; i<n-; i=i+)
r[i+] <= r[i]; r[] <= d;
end
end endmodule
 /*
(C) OOMusou 2009 http://oomusou.cnblogs.com Filename : delay_nt.v
Compiler : NC-Verilog 5.4
Description : delay 3t method 4
Release : 06/15/2009 1.0
*/ module delay_nt (
clk,
rst_n,
d,
q
); parameter n = ; input clk;
input rst_n;
input d;
output q; reg [n-:] r; assign q = r[n-]; always@(posedge clk or negedge rst_n) begin
if (!rst_n)
r <= ;
else
r <= {r, d};
end endmodule

{}写法是Verilog的独门绝技,这样就不再需要for,这也是为什么Verilog宁愿从C语言抢走{}换来begin, end,因为{}这种合并的写法非常的好用。Testbench与模拟波型图也与Method 1与Method 2一样,再次省略。这种写法使用了parameter,无论要delay几个clk,只需修改n即可,而且与Quartus II优化后的硬件一样,我们再次将编译过的RTL Viewer打开做验证。

Conclusion
这4种写法最后合出来的硬件都一样,表示现在的合成器都够聪明,差别只是在哪种coding style较好,将来比较好维护。另外也是开开眼界,若将来阅读其他人的code,马上就知道对方想表达的意思。

最新文章

  1. Stream与byte[]与Image与string
  2. Linux查看系统信息命令汇总
  3. github与eclipse创建仓库及克隆仓库
  4. chart.js图表库案例赏析,饼图添加文字
  5. jQuery中ready与load事件
  6. Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件
  7. 精华阅读第 9 期 |滴滴出行 iOS 客户端架构演进之路
  8. iOS动画详解(二)
  9. CF_216_Div_2
  10. UVa 10048: Audiophobia
  11. python2.5_1.5_通过指定的端口和协议找到服务名
  12. php自动运行
  13. Java并发编程之synchronized
  14. 程序猿表白练级之Hello World
  15. 修改oracle服务器端字符集
  16. webrtc底层一对一连接过程探索(三)
  17. Hadoop问题:There are 0 datanode(s) running and no node(s) are excluded in this operation.
  18. 内部排序-&gt;插入排序-&gt;直接插入排序
  19. IT高管和易筋经的故事
  20. MySQL表名不区分大小写的设置方法

热门文章

  1. C++ primer读书笔记 chapter3 标准库类型
  2. A Knight&#39;s Journey(dfs)
  3. phpMyAdmin 多个跨站脚本漏洞
  4. 有两个指针pa,pb分别指向有两个数,a,b,请写一个函数交换两个指针的指向,也就是让pa指向b,让pb指向a
  5. Android 安全测试
  6. UTF8与GBK、GB2312等其他字符编码的相互转换
  7. C语言数据类型的理解
  8. Rotation Lock Puzzle
  9. poj 3281 最大流建图
  10. Git 中README.md中MarkDown语法示例