(原創) 如何產生50MHz的時脈? (IC Design) (Verilog)
Abstract
DE2預設為50MHz,在寫Testbench時,該如何產生50MHz的時脈(clock)呢?
Verilog
1 /*
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3
4 Filename : Clk_50M.v
5 Compiler : ModelSim SE 6.1f
6 Description : Demo how to generate 50MHz clock
7 Release : 02/10/2008 1.0
8 */
9
10 module Clk_50M;
11
12 reg clk;
13
14 parameter clkper = 20; // 20ns = 50MHz
15 // parameter clkper = 10 // 10ns = 100MHz
16
17 initial
18 begin
19 clk = 1;
20 end
21
22 always
23 begin
24 # (clkper / 2) clk = ~clk;
25 end
26
27 endmodule
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3
4 Filename : Clk_50M.v
5 Compiler : ModelSim SE 6.1f
6 Description : Demo how to generate 50MHz clock
7 Release : 02/10/2008 1.0
8 */
9
10 module Clk_50M;
11
12 reg clk;
13
14 parameter clkper = 20; // 20ns = 50MHz
15 // parameter clkper = 10 // 10ns = 100MHz
16
17 initial
18 begin
19 clk = 1;
20 end
21
22 always
23 begin
24 # (clkper / 2) clk = ~clk;
25 end
26
27 endmodule
Waveform
14行
parameter clkper = 20; // 20ns = 50MHz
// parameter clkper = 10 // 10ns = 100MHz
// parameter clkper = 10 // 10ns = 100MHz
50MHz相當於週期20ns,而100MHz相當於週期10ns,這裡使用parameter,日後若要更改時脈,只要修改parameter即可。
17行
initial
begin
clk = 1;
end
begin
clk = 1;
end
一開始先將clk設為1。
22行
always
begin
# (clkper / 2) clk = ~clk;
end
begin
# (clkper / 2) clk = ~clk;
end
所謂的周期20ns,表示每10ns就會0變成1,1變成0。
Conclusion
為什麼要自己產生clock呢?在寫testbench時,只要是循序電路,除了接好連線外,接下來就是產生所需要的clock,所以這是一定要會的基本動作。