返回首页
当前位置: FPGA主页 > 工具应用 >

使用ModelSim完成基本的HDL仿真(2)

时间:2010-02-22 16:12来源:芯合FPGA学习网 作者:admin 点击:
我们选择Add Existing File,假设$ModelSim是你的ModelSim的跟目录,则添加下面两个文件: $ModelSim/examples/tutorials/verilog/basicSimulation/counter.v $ModelSim /examples/tutoria

我们选择Add Existing File,假设$ModelSim是你的ModelSim的跟目录,则添加下面两个文件:
$ModelSim/examples/tutorials/verilog/basicSimulation/counter.v
$ModelSim /examples/tutorials/verilog/basicSimulation/tcounter.v
添加文件的窗口如下图所示

添加文件的窗口

图4
Tcounter.v的源代码如下:

  1. module test_counter;   
  2.  
  3. reg clk, reset;  
  4. wire [7:0] count;   
  5.  
  6. counter dut (count, clk, reset);   
  7.  
  8. initial // Clock generator  
  9.   begin  
  10.     clk = 0;  
  11.     forever #10 clk = !clk;  
  12.   end  
  13.     
  14. initial // Test stimulus  
  15.   begin  
  16.     reset = 0;  
  17.     #5 reset = 1;  
  18.     #4 reset = 0;  
  19.   end  
  20.     
  21. initial  
  22.     $monitor($stime,, reset,, clk,,, count);   
  23.       
  24. endmodule     


counter.v的源代码如下:

  1. module counter (count, clk, reset);  
  2. output [7:0] count;  
  3. input clk, reset;   
  4.  
  5. reg [7:0] count;  
  6. parameter tpd_reset_to_count = 3;  
  7. parameter tpd_clk_to_count   = 2;   
  8.  
  9. function [7:0] increment;  
  10. input [7:0] val;  
  11. reg [3:0] i;  
  12. reg carry;  
  13.   begin  
  14.     increment = val;  
  15.     carry = 1'b1;  
  16.     /*   
  17.      * Exit this loop when carry == zero, OR all bits processed   
  18.      */   
  19.     for (i = 4'b0; ((carry == 4'b1) && (i <= 7));  i = i+ 4'b1)  
  20.        begin  
  21.          increment[i] = val[i] ^ carry;  
  22.          carry = val[i] & carry;  
  23.        end  
  24.   end         
  25. endfunction   
  26.  
  27. always @ (posedge clk or posedge reset)  
  28.   if (reset)  
  29.      count = #tpd_reset_to_count 8'h00;  
  30.   else 
  31.      count <= #tpd_clk_to_count increment(count);   
  32.  
  33. /*****************************************************************   
  34. Use the following block to make the design synthesizable.   
  35.  
  36. always @ (posedge clk or posedge reset)  
  37.   if (reset)  
  38.      count = 8'h00;  
  39.   else  
  40.      count <= count + 8'h01;  
  41. ******************************************************************/ 
  42. Endmodule  

(责任编辑:admin)

顶一下
(2)
50%
踩一下
(2)
50%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名:密码: 验证码:点击我更换图片
推荐内容