verilog学习笔记(加法器)


编程语言,光看书其实作用不大的,关键还需要自己进行实践。看书的时候,你觉得自己明白了、弄懂了,等到用modelsim实践的时候还是会出现这样那样的问题。因此,还是希望自己能够不断地训练和练习,这样可以达到熟能生巧的程度。就今天的加法器来说,其实内容还是比较简单的。主要就是数值和进位之间的关系。这些内容在计算机组成原理上面都会提到,关键是自己是否真正掌握。闲话不多说,可以编写一个verilog代码试试。

 

[cpp]  view plain  copy
 
  1. module add(a, b, in, c, out);  
  2.   
  3.     input a;  
  4.     input b;  
  5.     input in;  
  6.     output c;  
  7.     output out;  
  8.       
  9.     assign {out, c} = a + b + in;  
  10. endmodule  

    这里直接用数据流的形式解决。当然,大家可以根据自己的情况选择门电路编写也是可以的,毕竟条条大路通罗马嘛。不多说,继续编写testbench文件,

 

 

[cpp]  view plain  copy
 
  1. `timescale 1ns/1ns  
  2.   
  3. module count_t;  
  4.     
  5.   reg clk;  
  6.   reg a;  
  7.   reg b;  
  8.   reg in;  
  9.   wire c;  
  10.   wire out;  
  11.     
  12.   add process(a, b, in, c, out);  
  13.     
  14.   initial  
  15.       clk = 0;  
  16.   always    
  17.       forever  #5 clk = ~clk;  
  18.     
  19.   initial  
  20.   begin  
  21.         a = 0; b = 0; in = 0;  
  22.         #10  a = 0; b = 0; in = 1;  
  23.         #10  a = 0; b = 1; in = 0;  
  24.         #10  a = 0; b = 1; in = 1;  
  25.         #10  a = 1; b = 0; in = 0;  
  26.         #10  a = 1; b = 0; in = 1;  
  27.         #10  a = 1; b = 1; in = 0;  
  28.         #10  a = 1; b = 1; in = 1;  
  29.    
  30.  end     
  31.         
  32.   initial  
  33.   begin  
  34.       #200 $finish;  
  35.   end     
  36.         
  37.   initial  
  38.     $monitor(" out = %d, c = %d\n", out, c);  
  39.     
  40. endmodule  

    我们知道,两个数字相加,此时如果还有进位信息的话,那么就会出现8种情况。如果大家不觉得烦的话,可以把这8种情况都测试一遍。当然如果不想看波形,直接用minitor打印出来也是可以的。

测试模块用于检测模块设计是否正确。它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期有偏差,则需要对模块进行修改

综合就是把xxx.v文件送到综合器处理,在选定实现器件和选取生成Verilog网表的前提下,启动综合器的编译。综合器会自动生成一系列文件,向操作者报告综合的结果。其中生成的Verilog Netlist文件(扩展名为xxx.vm),表示自动生成的门级逻辑结构网表,仍然用Verilog语句表示,但是比输入的源文件更加具体,可以用测试模块调用它做同样的仿真,运行结果更接近实际器件

布局布线就是把综合后生成的另一种文件(EDIF),在不显工具控制下进行处理,启动布线工具的编译。布局布线工具会自动生成一系列文件,向操作者报告布局布线的结果。其中生成的Verilog Netlist文件(扩展名为xxx.vo),表示自动生成的具体基本门级结构和连接的延迟,仍然用了Verilog基本不见结构语句和连接线的延迟参数的重新定义表示,库中的基本部件也进一步具体化,比综合后的扩展名为xxx.vm的文件更具体。可以用同一个测试模块调用它做同样的仿真,运行结果与实际器件运行结果几乎完全一致。

学习网址:http://blog.csdn.net/feixiaoxing/article/details/8927675


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM