激勵檔案
需要注意
//時序變組合 去掉reg
output [3:
0] q;
reg [3:
0] cnt;
always @ (posedge clk or negedge rst_n)if(
!rst_n)
cnt <=
4'd0;
else
if(cin ==
1'b1)begin
if(cnt ==
4'd9)
cnt <=
4'b0;
else
cnt <= cnt +
1'b1;
endelse
cnt <= cnt;
//產生進製輸出訊號
//時序邏輯有延遲
/*always @ (posedge clk or negedge rst_n)
if(!rst_n)
cout <= 1'b0;
else if(cin == 1'b1 && cnt == 4'd9)
cout <= 1'b1;
else
cout <= 1'b0;
if(cin == 1'b1 && cnt == 4'd9)
*///產生進製輸出訊號
//assign cout = (cin == 1'b1 && cnt == 4'd9)?1'b1:1'b0; //兩種皆可
assign cout =
(cin ==
1'b1 && cnt == 4'd9)
;assign q = cnt ;
endmodule
module my_bcd_counter_top (clk,cin,rst_n,cout,q)
; input clk,cin,rst_n;
output cout;
//不賦值,直接輸出 去掉reg
output [11:
0] q;
wire cout0,cout1;
wire [3:
0] q0,q1,q2;
assign q=
;//拼接
my_bcd_counter my_bcd_counter0
(.clk (clk)
,.cin (cin)
,.rst_n (rst_n)
,.cout (cout0)
,.q (q0));
my_bcd_counter my_bcd_counter1
(.clk (clk)
,.cin (cout0)
,.rst_n (rst_n)
,.cout (cout1)
,.q (q1));
my_bcd_counter my_bcd_counter2
(.clk (clk)
,.cin (cout1)
,.rst_n (rst_n)
,.cout (cout)
,.q (q2));
endmodule
`timescale 1ns/
1ns`define clock_period 20
module my_bcd_counter_tb;
reg clk,cin,rst_n;
//激勵訊號
wire cout;
//輸出訊號
wire [3:
0] q;
my_bcd_counter my_bcd_counter0
(.clk (clk)
,.cin (cin)
,.rst_n (rst_n)
,.cout (cout)
,.q (q));
//t=20ns 給激勵訊號
initial clk =
1'b1;
always #(`clock_period /
2) clk =
~clk;
initial begin
rst_n =
1'b0;
//初始態
cin =
1'b0;
#(`clock_period *
200)
; rst_n =
1'b1;
#(`clock_period *20)
;repeat(30
)begin
cin =
1'b1;
#`clock_period ;
cin =
1'b0;
#(`clock_period *5)
; end
#(`clock_period *5)
; $stop;
endendmodule
`timescale 1ns/
1ns`define clock_period 20
module my_bcd_counter_top_tb;
reg clk,cin,rst_n;
//激勵訊號
wire cout;
//輸出訊號
wire [11:
0] q;
my_bcd_counter_top my_bcd_counter_top0
(.clk (clk)
,.cin (cin)
,.rst_n (rst_n)
,.cout (cout)
,.q (q));
//t=20ns 給激勵訊號
initial clk =
1'b1;
always #(`clock_period /
2) clk =
~clk;
initial begin
rst_n =
1'b0;
//初始態
cin =
1'b0;
#(`clock_period *
200)
;//4000ns
rst_n =
1'b1;
#(`clock_period *20)
;//4400ns
cin =
1'b1;
#(`clock_period *
5000);
//10_4400ns
$stop;
endendmodule
1>.時序邏輯有時鐘的延遲,時鐘上公升沿觸發一次。
always @ (posedge clk or negedge rst_n)
if(!rst_n)
cout <= 1'b0;
else if(cin == 1'b1 && cnt == 4'd9)
cout <= 1'b1;
else
cout <= 1'b0;
2>.組合邏輯無時鐘延遲
//產生進製輸出訊號
//assign cout = (cin == 1'b1 && cnt == 4'd9)?1'b1:1'b0; //兩種皆可
使用Verilog實現FPGA計數器功能
編寫veriloghdl 程式,實現如下功能 利用開發板上的數碼顯示解碼器設計乙個十進位制計數器,要求該計數器具有以下功能 1.計數範圍為 0 20 計算到 20時自動清零,計數間隔時間為1s 2.具有按鍵非同步 同步清零功能 1.用乙個時鐘脈衝,分出兩個頻率,乙個為計數頻率,乙個為掃瞄頻率。2.利...
使用Verilog實現FPGA計數器功能
編寫veriloghdl 程式,實現如下功能 利用開發板上的數碼顯示解碼器設計乙個十進位制計數器,要求該計數器具有以下功能 1.計數範圍為 0 20 計算到 20時自動清零,計數間隔時間為1s 2.具有按鍵非同步 同步清零功能 1.用乙個時鐘脈衝,分出兩個頻率,乙個為計數頻率,乙個為掃瞄頻率。2.利...
Hadoop計數器與自定義計數器(筆記7)
計數器 計數器是用來記錄job的執行進度和狀態的。它的作用可以理解為日誌。我們通常可以在程式的某個位置插入計數器,用來記錄資料或者進度的變化情況,它比日誌更便利進行分析。例如,我們有乙個檔案,其中包含如下內容 hello you hello me 它被wordcount程式執行後顯示如下日誌 在上圖...