一、時(shí)序邏輯
時(shí)序邏輯是Verilog HDL 設(shè)計(jì)中另一類重要應(yīng)用。從電路特征上看來,其特點(diǎn)為任意時(shí)刻的輸出不僅取決于該時(shí)刻的輸入,而且還和電路原來的狀態(tài)有關(guān)。
從電路行為上講,不管輸入如何變化,僅當(dāng)時(shí)鐘的沿(上升沿或下降沿)到達(dá)時(shí),才有可能使輸出發(fā)生變化。
1、在描述時(shí)序電路的always塊中的reg型信號(hào)都會(huì)被綜合成寄存器,這是和組合邏輯電路所不同的。
2、時(shí)序邏輯中推薦使用非阻塞賦值“<=”。
3、時(shí)序邏輯的敏感信號(hào)列表只需要加入所用的時(shí)鐘觸發(fā)沿即可,其余所有的輸入和條件判斷信號(hào)都不用加入,這是因?yàn)闀r(shí)序邏輯是通過時(shí)鐘信號(hào)的跳變沿來控制的。
二、時(shí)序邏輯在FPGA里RTL實(shí)現(xiàn)
我們寫一個(gè)簡(jiǎn)單的寄存器,看看fpga是怎樣實(shí)現(xiàn)時(shí)序邏輯的
module counter( input a, input clk, output reg q ); always@(posedge clk)begin q <= a; end endmodule
我們看一下fpga的芯片規(guī)劃器

從芯片規(guī)劃器,可以看出來幾個(gè)細(xì)節(jié)。
1、我們用了一個(gè)查找表、一個(gè)寄存器。對(duì)FPGA來說,這個(gè)寄存器你就算不使用他也是在那里的
2、我么的輸出信號(hào)是與clk同步的,必須要等到clk的上升沿到來是,輸出才會(huì)更新,因此就實(shí)現(xiàn)了寄存器的功能
三、同步復(fù)位、異步復(fù)位
1、同步復(fù)位:其實(shí)就是你的操作和時(shí)鐘的上升沿同步
舉個(gè)例子,你要將q設(shè)置為0,下面這代碼就是同步復(fù)位,q <= 0,是在時(shí)鐘上升沿到來時(shí)執(zhí)行的,所以是同步復(fù)位
module counter(
input a,
input clk,
output reg q
);
always@(posedge clk)begin
q <= 0;
end
endmodule
2、異步復(fù)位:其實(shí)就是你的操作和時(shí)鐘沒有關(guān)系
舉個(gè)例子,你要將q設(shè)置為0,下面這代碼就是異步復(fù)位,q <= 0,無論時(shí)鐘是什么狀態(tài),只有rst_n到來就執(zhí)行清零
module counter(
input a,
input clk,
input rst_n,
output reg [7:0] q
);
always@(posedge clk,negedge rst_n)begin
if(!rst_n)
q <= 0;
else
q <= q + 1'b1;
end
endmodule
四、競(jìng)爭(zhēng)冒險(xiǎn)
競(jìng)爭(zhēng)冒險(xiǎn):意思是,在我時(shí)鐘的上升沿進(jìn)行采樣時(shí),輸入信號(hào)處于不穩(wěn)定狀態(tài),這個(gè)會(huì)給電路帶來亞穩(wěn)態(tài)的問題

為了解決競(jìng)爭(zhēng)冒險(xiǎn),我們只要滿足信號(hào)的建立時(shí)間和保持時(shí)間即可

五、verilog語法補(bǔ)充
1、parameter 定義全局變量
parameter T = 26'd49_000_000;
2、defparam重新定義參數(shù),這個(gè)主要是在仿真腳本修改例化的模塊的內(nèi)部參數(shù)
defparam counter_inst.T = 26'd49; counter counter_inst( .clk (clk), .rst_n (rst_n), .flag (flag)
六、計(jì)數(shù)器設(shè)計(jì)
設(shè)計(jì)一個(gè)1秒的計(jì)數(shù)器,當(dāng)時(shí)間到一秒后給出一個(gè)flag信號(hào)
1、代碼實(shí)現(xiàn) verilog.v
module counter(
input clk,
input rst_n,
output reg flag
);
reg [25:0] count;
parameter T = 26'd49_000_000;
always@(posedge clk,negedge rst_n)begin
if(!rst_n)begin
flag <= 1'b0;
count <= 0;
end
else if(count == T)begin
flag <= 1'b1;
count <= 0;
end
else
begin
count <= count + 1'b1;
flag <= 1'b0;
end
end
endmodule
2、仿真腳本
我在仿真腳本將時(shí)間參數(shù)改為T改為 T=26‘d49;方便仿真
`timescale 1ns/1ps module counter_tb; reg clk; reg rst_n; wire flag; defparam counter_inst.T = 26'd49; counter counter_inst( .clk (clk), .rst_n (rst_n), .flag (flag) ); always #10 clk = ~clk; initial begin clk = 0; rst_n = 0; #20; rst_n = 1; #5000000; $stop; end endmodule
3、仿真結(jié)果
1、可以看出脈沖flag只持續(xù)了一個(gè)周期

2、可以看出脈沖的觸發(fā)是50個(gè)計(jì)數(shù)值

七、計(jì)數(shù)器里隱藏的加法器問題
我們?cè)O(shè)計(jì)的這個(gè)計(jì)數(shù)器,里面其實(shí)用了一個(gè)加法器,加法器是組合邏輯(因?yàn)榻M合邏輯只取決于輸入)
當(dāng)我們給加法器一個(gè)初值0的時(shí)候,加法器的輸出立即就輸出1,這就是仿真的時(shí)候,開始復(fù)位拉高后,count在第一個(gè)clk上升沿就為1的原因

審核編輯:劉清
-
FPGA
+關(guān)注
關(guān)注
1664文章
22512瀏覽量
639613 -
邏輯電路
+關(guān)注
關(guān)注
13文章
503瀏覽量
44264 -
寄存器
+關(guān)注
關(guān)注
31文章
5621瀏覽量
130459 -
Verilog
+關(guān)注
關(guān)注
31文章
1374瀏覽量
114739 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2321瀏覽量
98622 -
時(shí)序邏輯電路
+關(guān)注
關(guān)注
2文章
94瀏覽量
17187 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6435瀏覽量
121228 -
FPGA開發(fā)板
+關(guān)注
關(guān)注
10文章
130瀏覽量
32510 -
Verilog語言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8829
原文標(biāo)題:筆記連載精選 |【時(shí)序邏輯、競(jìng)爭(zhēng)冒險(xiǎn)、同步復(fù)位、異步復(fù)位】之【計(jì)數(shù)器設(shè)計(jì)、verilog語法補(bǔ)充】
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
時(shí)序電路設(shè)計(jì)的計(jì)數(shù)器詳解
中規(guī)模集成時(shí)序邏輯設(shè)計(jì)
時(shí)序邏輯電路
計(jì)數(shù)器,計(jì)數(shù)器的工作原理是什么?
基于Multisim的計(jì)數(shù)器設(shè)計(jì)仿真
計(jì)數(shù)器及時(shí)序電路
計(jì)數(shù)器邏輯功能測(cè)試實(shí)驗(yàn)報(bào)告
采用中規(guī)模集成計(jì)數(shù)器進(jìn)行任意進(jìn)制計(jì)數(shù)器設(shè)計(jì)的解決方案
MOD計(jì)數(shù)器和時(shí)序圖
單片機(jī)計(jì)數(shù)器工作原理及講解
同步計(jì)數(shù)器和異步計(jì)數(shù)器是什么 同步計(jì)數(shù)器和異步計(jì)數(shù)器的主要區(qū)別?
時(shí)序邏輯電路設(shè)計(jì)之計(jì)數(shù)器
時(shí)序邏輯電路設(shè)計(jì)之同步計(jì)數(shù)器
時(shí)序邏輯電路設(shè)計(jì)之異步計(jì)數(shù)器
設(shè)計(jì)一個(gè)計(jì)數(shù)器來講解時(shí)序邏輯
評(píng)論