前言:本章內(nèi)容主要是演示Vivado下利用Verilog語言進(jìn)行電路設(shè)計(jì)、仿真、綜合和下載
示例:觸發(fā)器電路
???
- 功能特性:?采用?Xilinx Artix-7 XC7A35T芯片?
- 配置方式:USB-JTAG/SPI Flash
- 高達(dá)100MHz 的內(nèi)部時(shí)鐘速度?
- 存儲(chǔ)器:2Mbit SRAM ??N25Q064A SPI Flash(樣圖舊款為N25Q032A)
- 通用IO:Switch :x8LED:x16Button:x5DIP:x8? ?通用擴(kuò)展IO:32pin
- 音視頻/顯示:?7段數(shù)碼管:x8 VGA視頻輸出接口?Audio音頻接口?
- 通信接口:UART:USB轉(zhuǎn)UART? ?Bluetooth:藍(lán)牙模塊?
- 模擬接口:?DAC:8-bit分辨率? ?XADC:2路12bit 1Msps ADC
目錄
Ⅰ. 前置知識(shí)
0x00?利用7400搭建RS觸發(fā)器
0x01?D觸發(fā)器
0x02 帶復(fù)位的D觸發(fā)器
0x03?帶置位/復(fù)位的D觸發(fā)器
Ⅱ. Verilog實(shí)現(xiàn)
0x00?RS觸發(fā)器(上升沿觸發(fā))
0x01?D觸發(fā)器?(上升沿觸發(fā))
0x02?帶復(fù)位的D觸發(fā)器
0x03?同步置位/復(fù)位端口的上升沿?D?觸發(fā)器
0x04?異步置位/復(fù)位端口的上升沿?D?觸發(fā)器
Ⅰ. 前置知識(shí)
0x00?利用7400搭建RS觸發(fā)器
注意:
a、由于?時(shí)觸發(fā)器輸出保持,因此若初始狀態(tài)
,仿真啟動(dòng)時(shí)會(huì)報(bào)錯(cuò)或狀態(tài)不定。
b、根據(jù)觸發(fā)器的定義,應(yīng)互補(bǔ),因此
是非法狀態(tài)。
?得出RS觸發(fā)器的真值表如下:
輸 ???入 |
輸 ???出 |
||
|
|
|
Q |
0 |
0 |
保持不變 |
|
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1(0) |
1(0) |
0x01?D觸發(fā)器
?在數(shù)字電路中,D觸發(fā)器是最為簡(jiǎn)單也是最為常用的一種基本時(shí)序邏輯電路,它是構(gòu)成數(shù)字電路系統(tǒng)的基礎(chǔ)。
大體可分為如下幾類:基本的D觸發(fā)器;同步復(fù)位的D觸發(fā)器;異步復(fù)位的D觸發(fā)器;同步置位/復(fù)位的D觸發(fā)器;異步置位/復(fù)位的D觸發(fā)器。
設(shè)計(jì)上升沿觸發(fā)的D觸發(fā)器,即當(dāng)檢測(cè)到時(shí)鐘上升沿到來時(shí),觸發(fā)器根據(jù)真值表輸出:
觸發(fā)器 |
D |
CP |
Q |
Q’ |
D |
X |
0 |
保持 |
保持 |
D |
X |
1 |
保持 |
保持 |
D |
0 |
上升沿 |
0 |
1 |
D |
1 |
上升沿 |
1 |
0 |
0x02 帶復(fù)位的D觸發(fā)器
在數(shù)字電路中,一種常見的帶有復(fù)位控制端口的上升沿D觸發(fā)器的功能表如表所示:
觸發(fā)器 |
R |
D |
CP |
Q |
Q’ |
D |
0 |
X |
上升沿(同步復(fù)位) |
0 |
1 |
D |
0 |
X |
X(異步復(fù)位) |
0 |
1 |
D |
1 |
X |
0 |
保持 |
保持 |
D |
1 |
X |
1 |
保持 |
保持 |
D |
1 |
0 |
上升沿 |
0 |
1 |
D |
1 |
1 |
上升沿 |
1 |
0 |
不難看出,同步復(fù)位意味著只有在時(shí)鐘信號(hào)的上升沿到來并且復(fù)位控制端口的信號(hào)有效時(shí),D觸發(fā)器才進(jìn)行復(fù)位操作,即將輸出端口Q的值置為邏輯0,而把輸出端口Q的值置為邏輯1;異步復(fù)位在于只要復(fù)位控制端口的信號(hào)有效,D觸發(fā)器就會(huì)立即進(jìn)行復(fù)位操作,這時(shí)的復(fù)位操作是與時(shí)鐘信號(hào)無關(guān)的。
0x03?帶置位/復(fù)位的D觸發(fā)器
帶有同步置位/復(fù)位端口的上升沿D觸發(fā)器的邏輯電路符號(hào)如圖所示:
它的功能表如表所示:
觸發(fā)器 |
S |
R |
D |
CP |
Q |
Q’ |
D |
1 |
0 |
X |
上升沿(同步復(fù)位) |
0 |
1 |
D |
0 |
1 |
X |
上升沿(同步復(fù)位) |
1 |
0 |
D |
1 |
1 |
X |
0 |
保持 |
保持 |
D |
1 |
1 |
X |
1 |
保持 |
保持 |
D |
1 |
1 |
0 |
上升沿 |
0 |
1 |
D |
1 |
1 |
1 |
上升沿 |
1 |
0 |
不難看出,只有在時(shí)鐘信號(hào)的上升沿到來并且同步置位/復(fù)位端口的信號(hào)有效時(shí),D觸發(fā)器才可以進(jìn)行置位或者復(fù)位操作。
Ⅱ. Verilog實(shí)現(xiàn)
0x00?RS觸發(fā)器(上升沿觸發(fā))
設(shè)計(jì)代碼:
module?RS(clk,R,S,q,qb);
input?clk,R,S;
output?q,qb;
reg?q;
assign?qb=~q;
always@(posedge?clk)?
???case({R,S})
???????2'b01:?q<=0;
???????2'b10:?q<=1;
???????2'b00:?q<=1'bx;
???????endcase
endmodule
仿真代碼:
module?test();
????reg?clk,R,S;
????wire?q,qb;
???????RS?uut(
????????????.R(R),
????????????.S(S),
????????????.clk(clk),
????????????.q(q),
????????????.qb(qb)
????????????);?????initial
????????begin
????????????clk=0;
????????end
?????????
????always?#10?clk=~clk;?
????initial
????????begin
????????????R=0;S=0;
????????????#10?R=0;S=1;
????????????#20?R=1;S=0;
????????????#20?R=1;S=1;
????????????#20?$finish;
?????????end?
endmodule
仿真波形:
0x01?D觸發(fā)器?(上升沿觸發(fā))
設(shè)計(jì)文件:
module?async_rddf(clk,?d,q,qb);
input?clk,?d;
output?q,qb;
reg?q,qb;
always?@(posedge?clk)?begin
q<=d;?qb<=~d;
end
endmodule
仿真文件:
`timescale?1ns?/?1ns
module?test;
reg?clk;?reg?d;
wire?q;?wire?qb;
async_rddf?uut?(.clk(clk),?.d(d),?.q(q),?.qb(qb));
initial?begin
clk?=?0;
d?=?0;
#100;
end
always?#20?clk=~clk;
always?#30?d=~d;
endmodule
仿真波形:
0x02?帶復(fù)位的D觸發(fā)器
設(shè)計(jì)文件:
module?sync_rddf(clk,reset,d,q,qb);
input?clk,reset,d;
output?q,qb;
reg?q,qb;
always?@(posedge?clk)?begin
if(!reset)?begin
q<=0;
qb<=1;
end
else?begin
q<=d;
qb<=~d;
end
end
endmodule
仿真文件:
`timescale?1ns?/?1ns
module?test;
reg?clk;?reg?d;reg?reset;
wire?q;?wire?qb;
sync_rddf?uut?(.reset(reset),.clk(clk),?.d(d),?.q(q),?.qb(qb));
initial?begin
clk?=?0;
d?=?0;
reset?=?0;
#100;
end
always?#25?reset=~reset;
always?#20?clk=~clk;
always?#30?d=~d;
endmodule
仿真波形:
0x03?同步置位/復(fù)位端口的上升沿?D?觸發(fā)器
設(shè)計(jì)代碼:
module?sync_rsddf(clk,reset,set,d,q,qb);
input?clk,reset,set;
input?d;
output?q,qb;
reg?q,qb;
always?@(posedge?clk)?begin
if(!set?&&?reset)?begin
q<=1;
qb<=0;
end
else?if(set?&&?!reset)?begin
q<=0;
qb<=1;
end
else?begin
q<=d;
qb<=~d;
end
end
endmodule
仿真代碼:
`timescale?1ns?/?1ns
module?test;
reg?clk;?reg?d;reg?reset;reg?set;
wire?q;?wire?qb;
sync_rsddf?uut?(.set(set),.reset(reset),.clk(clk),?.d(d),?.q(q),?.qb(qb));
initial?begin
clk?=?0;
d?=?0;
reset?=?0;
set?=?0;
#100;
end
always?#25?reset=~reset;
always?#10?set=~set;
always?#20?clk=~clk;
always?#30?d=~d;
endmodule
仿真波形:
0x04?異步置位/復(fù)位端口的上升沿?D?觸發(fā)器
設(shè)計(jì)代碼:
module?set_D(clk,n_reset,n_set,d,q,qb);
input?clk,n_reset,n_set;
input?d;
output?q,qb;
reg?q,qb;
always?@(posedge?clk?or?negedge?n_reset?or?negedge?n_set)?
??begin
??if(!n_set?&&?n_reset)?
????begin
????q<=1;
????qb<=0;
????end
??else?if(n_set?&&?!n_reset)?
????begin
????q<=0;
????qb<=1;
????end
??else?
????begin
????q<=d;
????qb<=~d;
????end
??end
endmodule
仿真代碼:
module?sim_set_D();
reg?clk,n_reset,n_set;
reg?d;
wire?q,qb;
set_D?uu1(clk,n_reset,n_set,d,q,qb);
initial?{clk,n_reset,n_set,d}=4'b0000;
always?#20?clk=~clk;
always?#40?n_reset=~n_reset;
always?#80?n_set=~n_set;
always?#30?d=~d;
endmodule
仿真波形:文章來源:http://www.zghlxwxcb.cn/news/detail-510410.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-510410.html
到了這里,關(guān)于【FPGA】Verilog:時(shí)序電路 | 觸發(fā)器電路 | 上升沿觸發(fā) | 同步置位 | 異步置位的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!