時(shí)序邏輯電路 計(jì)數(shù)器的實(shí)現(xiàn)
1 D觸發(fā)器
分析:
特性:輸出端Q只在CK處于上升沿的時(shí)候變化
圖中波形的形成過(guò)程:
當(dāng)D處于高電平時(shí),CK未處于上升沿時(shí),Q仍處于低電平
當(dāng)CK來(lái)到上升沿,Q需要根據(jù)D發(fā)生變化,由于D是高電平,所以Q要從低電平變化成高電平
D從高電平變化成低電平,但是此時(shí)CK未來(lái)到上升沿,所以Q不隨著D變化(雖然D變了,Q仍保持剛剛的狀態(tài)——存儲(chǔ)功能)
CK來(lái)到上升沿,此時(shí)D又恢復(fù)了高電平,所以Q不變
2 計(jì)數(shù)器
原理:加法器基本結(jié)構(gòu)圖
這樣就能實(shí)現(xiàn) 每一個(gè)時(shí)序上升沿,計(jì)數(shù)器結(jié)果都加1
今天我們的任務(wù)是:
設(shè)計(jì)一個(gè)以1秒頻率閃爍的LED燈(亮滅各500ms)
怎么知道500ms亮,500ms滅呢?
-
我們就需要一個(gè)計(jì)數(shù)器,計(jì)數(shù)到什么時(shí)候到了500ms
-
時(shí)鐘的頻率我們?cè)O(shè)置為
50MHz 20ns
,也就是兩個(gè)上升沿(一個(gè)周期)的時(shí)間是20ns
-
每到一個(gè)上升沿,計(jì)數(shù)器的值加一次
-
由于500ms亮和滅,所以我們需要計(jì)數(shù)器計(jì)數(shù) 500ms/20ns = 25000000次
-
而一個(gè)四位計(jì)數(shù)器肯定計(jì)數(shù)不了這么多的值,那么需要多少位呢?
- 源代碼
module led_flash(
clk,
reset_n,//reset是復(fù)位信號(hào), _n 表示低電平有效,也就是低電平時(shí)復(fù)位
led
);
input clk;
input reset_n;
output reg led;
reg [24:0] counter;//25位計(jì)數(shù)器
always@(posedge clk or negedge reset_n) //當(dāng)clk處于上升沿或者reset處于下降沿的時(shí)候下面的代碼就生效
if(!reset_n) // if(reset_n == 0)
counter <= 0; // <= 是非阻塞賦值的意思
else if (counter == 2500_0000) //-1)
counter <= 0;
else
counter <= counter + 1'd1;
//需要讓 led 燈每500ms翻轉(zhuǎn)一次
always@(posedge clk or negedge reset_n)
if(!reset_n)
led <= 0;
else if (counter == 2500_0000) //-1) 要減1
led <= !led; //翻轉(zhuǎn)
endmodule
仿真代碼
`timescale 1ns / 1ps
module led_flash_tb(
);
reg clk;
reg reset_n;
wire led;
led_flash UUT(
.clk(clk),
.reset_n(reset_n),
.led(led)
);
initial clk = 1;
always #10 clk =! clk;
initial begin
reset_n = 0;
#201; //避開上升沿
reset_n = 1;
#20_0000_0000; // 2s
end
endmodule
- 仿真
從仿真的結(jié)果看
比預(yù)想的500ms 多了 20ns
原因是這里如果想計(jì)數(shù)2500_0000次,應(yīng)該寫2499_9999
這里以計(jì)數(shù)到4為例,如果要計(jì)數(shù)到4的話,實(shí)際上不是計(jì)數(shù)了4次,而是5次
- 0-1
- 1-2
- 2-3
- 3-4
- 4-0
所以應(yīng)該改為 2500_0000-1
改過(guò)之后 就可以了文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-491074.html文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-491074.html
改過(guò)之后 就可以了
到了這里,關(guān)于【FPGA】時(shí)序邏輯電路——基于計(jì)數(shù)器實(shí)現(xiàn)一個(gè)以1秒頻率閃爍的LED燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!