码迷,mamicode.com
首页 > 其他好文 > 详细

(筆記) verilog & simulation

时间:2017-11-01 23:59:48      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:fine   color   src   ++   initial   alt   span   class   form   

第一次寫verilog對語法還有些陌生,不過基礎的東西還是要走一遍才會印象深刻。

以4bit counter為題目,首先開始想一個counter是由什麼來組成。

1. clock

2. reset

3. 4bit register

 1 module counter(
 2     clk,
 3     rst,
 4     count
 5 );
 6 
 7 input clk;
 8 input rst;
 9 output [4:0] count;
10 reg[4:0] out;
11 
12 assign count = out;
13 
14 
15 always@(posedge clk or posedge rst)begin
16 
17     if(rst == 1)
18         out <= 0;
19     else if(out == 4hF)
20         out <= 0;
21     else
22         out <= out + 1;
23 
24 end
25 
26 endmodule

假設以後有超過1個以上的module需要simulation,所以我的test bench取名為main。

 1 `timescale 1ns/100ps
 2 `define CYCLE 20
 3 
 4 module main;
 5 
 6     reg clk;
 7     reg rst;
 8     wire[4:0] count;
 9     always #(`CYCLE / 2) clk = ~clk;
10 
11     initial begin
12 
13         $dumpfile("main.vcd");
14         $dumpvars(0, mode1);
15         $monitor("clk = %d", clk);
16         #0 clk = 0;
17         #1 rst = 1;
18         #30 rst = 0;
19 
20         #1000 $finish;
21 
22     end
23     
24     counter mode1(clk, rst, count);
25 endmodule

 

`timescale 1ns/100ps
`define CYCLE 20

test bench第1, 2行

timescale顧名思義就是定義時間的刻度,則1ns代表一個delay的單位,100ps是代表在simulation時,是waveform最細的單位。

define感覺用法跟C/C++雷同。

不過我花最多的時間的地方應該是要如何把counter module 裡面的count接出來。

在module內必須先定義一個4bits register來計算counter值,最後在assign給count輸出。

而test bench內要把4bit 的data接出來必須使用同樣大小的wire接出來。

以下是模擬結果。

技术分享

 

(筆記) verilog & simulation

标签:fine   color   src   ++   initial   alt   span   class   form   

原文地址:http://www.cnblogs.com/ollie-lin/p/verilog.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!