事先规划RTL结构

事先规划RTL结构

2017年07月18日 00:23:47

阅读数:343

目前成熟的EDA工具都是将RTL(寄存器传输级)层次的硬件描述语言转换为实际的电路。所谓RTL的含义就是D触发器之间穿插着组合逻辑。对于组合逻辑,我们只需描述它输入和输出的关系表达式(用if-else和case语句)不必深究到底用怎样的逻辑门来实现,而对于D触发器,则是一定要做到心中有数,就是哪些变量会生成D触发器。

举例来说,一个在CLK时钟驱动下,对输入信号IN进行上跳沿捕获的电路,其电路RTL结构如左图所示,它的Verilog代码如下所示,另外,EDA工具进行编译之后,会提取出RTL结构如右图所示,我们可以观察EDA工具解析出的RTL是否和我们预想的一致,这是一种重要的验证手段。对于Quartus工具,Tools -> Netlist Viewer -> RTL Viewer

 

 

 

顶层代码:

 

 
  1. module liuyang(clk , in , out);

  2.  
  3. input clk ;

  4. input in ;

  5. output out ;

  6.  
  7. wire d1r;

  8. d1 d1_dut(.clk(clk) , .in(in) , .q1(d1r));

  9.  
  10. wire d2r;

  11. d2 d2_dut(.clk(clk) , .in(d1r) , .q2(d2r));

  12.  
  13. assign out = d1r && (~d2r) ;

  14.  
  15. endmodule


触发器一:

 

 

 
  1. module d1(clk , in , q1);

  2.  
  3. input clk ;

  4. input in ;

  5. output reg q1 ;

  6.  
  7. always @ (posedge clk )

  8. begin

  9. q1 <= in ;

  10. end

  11.  
  12.  
  13. endmodule

 

 

触发器二:

 

 
  1. module d2(clk , in , q2);

  2.  
  3. input clk ;

  4. input in ;

  5. output reg q2 ;

  6.  
  7. always @ (posedge clk )

  8. begin

  9. q2 <= in ;

  10. end

  11.  
  12.  
  13. endmodule

 

 

RTL视图:

testbench:

 

 
  1. `timescale 1ns/1ps

  2.  
  3. module liuyang_tb;

  4.  
  5. reg clk ;

  6. reg in ;

  7. wire out ;

  8.  
  9. liuyang dut(.clk(clk) , .in(in) , .out(out));

  10.  
  11. initial begin

  12. clk = 1'b0 ;

  13. in = 1'b0 ;

  14. #200.1

  15.  
  16. in = 1'b1 ;

  17. #1000

  18.  
  19. in = 1'b0 ;

  20. #1000

  21.  
  22. in = 1'b1 ;

  23.  
  24. end

  25.  
  26. always #20 clk = ~clk ;

  27.  
  28. endmodule

 

 


modelsim:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值