題目說明
考慮下面的時序電路:
圖片來自HDLBits
我們用3個包含觸發(fā)器和多路選擇器的子模塊來實現(xiàn)圖中電路。題目要求我們寫出包含一個觸發(fā)器和一個多路選擇器的子模塊。
模塊端口聲明
moduletop_module( inputclk, inputL, inputr_in, inputq_in, outputregQ);
題目解析
題目只要求我們寫出包含一個觸發(fā)器和一個多路選擇器的子模塊,所以不需要看整張圖片,看圖片前部分即可。
moduletop_module( inputlogicclk, inputlogicL, inputlogicr_in, inputlogicq_in, outputlogicQ); always_ff@(posedgeclk)begin if(L)Q<=?r_in?; ????????else??Q?<=?q_in?; ????end endmodule
點擊Submit,等待一會就能看到下圖結(jié)果:
注意圖中無參考波形。
這一題就結(jié)束了。
Problem 91-2014_q4a
題目說明
考慮如下所示 的n位移位寄存器電路:
圖片來自HDLBits
如上圖所示,還是實現(xiàn)包含選擇器和觸發(fā)器的部分。
模塊端口聲明
moduletop_module( inputclk, inputw,R,E,L, outputQ );
題目解析
還是實現(xiàn)包含選擇器和觸發(fā)器的部分。
moduletop_module( inputlogicclk, inputlogicw,R,E,L, outputlogicQ ); always_ff@(posedgeclk)begin casex({E,L}) 2'b00:Q<=?Q?; ????????????2'bx1:?Q?<=?R?; ????????????2'b10:?Q?<=?w?; ????????endcase ????end endmodule
點擊Submit,等待一會就能看到下圖結(jié)果:
注意圖中無參考波形。
這一題就結(jié)束了。
Problem 92-ece241_2014_q4
題目說明
如下圖所示的狀態(tài)機,假設(shè)D觸發(fā)器在狀態(tài)機啟動之前初始化為0,實現(xiàn)該電路:
圖片來自HDLBits
模塊端口聲明
moduletop_module( inputclk, inputx, outputz );
題目解析
首先先寫出組合電路中邏輯,然后再寫時序電路邏輯即可。
moduletop_module( inputlogicclk, inputlogicx, outputlogicz ); varlogicQ1,Q2,Q3,D1,D2,D3; always_combbegin D1=x^Q1; D2=x&~Q2; D3=x|~Q3; z=~(Q1|Q2|Q3); end always_ff@(posedgeclk)begin Q1<=?D1?; ????????Q2?<=?D2?; ????????Q3?<=?D3?; ????end endmodule
點擊Submit,等待一會就能看到下圖結(jié)果:
注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。
這一題就結(jié)束了。
Problem 93-ece241_2013_q7
題目說明
JK 觸發(fā)器真值表如下。實現(xiàn)一個 JK 觸發(fā)器。注意:Qold 是正時鐘沿之前 D 觸發(fā)器的輸出。
圖片來自HDLBits
模塊端口聲明
moduletop_module( inputclk, inputj, inputk, outputQ);
題目解析
這道題目要求是根據(jù)真值表寫出邏輯表達式,當(dāng)然也可以直接根據(jù)特性方程寫出邏輯。
JK觸發(fā)器的特性方程如下:
moduletop_module( inputlogicclk, inputlogicj, inputlogick, outputlogicQ); varlogicD; always_combbegin case({j,k}) 2'b00:D=Q; 2'b01:D='0; 2'b11:D=~Q; 2'b10:D='1; endcase end always_ff@(posedgeclk)begin Q<=?D; ????end endmodule
點擊Submit,等待一會就能看到下圖結(jié)果:
注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。
這一題就結(jié)束了。
Problem 94-Edgedetect
題目說明
對于 8 位向量中的每一位,檢測輸入信號何時從一個時鐘周期的 0 變?yōu)橄乱粋€時鐘周期的 1(類似于上升沿檢測)。輸出位應(yīng)在發(fā)生 0 到 1 轉(zhuǎn)換后的周期內(nèi)。
下圖給我們展示了輸入in[1]和輸出pedge[1]的時序關(guān)系圖:
圖片來自HDLBits
模塊端口聲明
moduletop_module( inputclk, input[7:0]in, output[7:0]pedge );
題目解析
查看:
https://blog.csdn.net/qq_31799983/article/details/81544707
moduletop_module( inputlogicclk, inputlogic[7:0]in, outputlogic[7:0]pedge ); wirelogic[7:0]in_reg_n,in_reg_l; always_ff@(posedgeclk)begin in_reg_n<=?in?; ????????in_reg_l?<=?in_reg_n?; ????end ???? ????assign?pedge?=?in_reg_n&~in_reg_l?; endmodule
點擊Submit,等待一會就能看到下圖結(jié)果:
注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。
這一題就結(jié)束了。
Problem 95-Edgedetect2
題目說明
在一個8bit的變量中,從一個周期到另一個周期期間,檢測輸入信號變化。即上升沿變化或下降沿變化。輸出應(yīng)在0變?yōu)?后產(chǎn)生。
如下圖所示為輸入與輸出的時序關(guān)系
圖片來自HDLBits
模塊端口聲明
moduletop_module( inputclk, input[7:0]in, output[7:0]anyedge );
題目解析
雙邊沿檢測,在上一題基礎(chǔ)上加上下降沿檢測即可。
moduletop_module( inputlogicclk, inputlogic[7:0]in, outputlogic[7:0]anyedge ); wirelogic[7:0]in_reg,edge_flag; always_ff@(posedgeclk)begin in_reg<=?in?; ????end ???? ????assign?edge_flag?=?in&~in_reg?|?~in&in_reg?; ???? ????always_ff@(posedge?clk)?begin ????????anyedge?<=?edge_flag?; ????end endmodule
點擊Submit,等待一會就能看到下圖結(jié)果:
注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。
這一題就結(jié)束了。
Problem 96-Edgecapture
題目說明
對于 32 位向量中的每一位,在輸入信號從一個時鐘周期的 1 變?yōu)橄乱粋€時鐘周期的 0 時進行捕捉?!安东@”表示輸出將保持為 1,直到寄存器復(fù)位(同步復(fù)位)。
每個輸出位的行為類似于 SR 觸發(fā)器:輸出位應(yīng)在 1 到 0 轉(zhuǎn)換發(fā)生后的周期設(shè)置(為 1)。當(dāng)復(fù)位為高電平時,輸出位應(yīng)在正時鐘沿復(fù)位(為 0)。
如果上述兩個事件同時發(fā)生,則復(fù)位優(yōu)先。在下面示例波形的最后 4 個周期中,“reset”事件比“set”事件早一個周期發(fā)生,因此這里不存在沖突。
在下面的示例波形中,為清楚起見,reset、in[1] 和 out[1] 被突出顯示。
圖片來自HDLBits
模塊端口聲明
moduletop_module( inputclk, inputreset, input[31:0]in, output[31:0]out );
題目解析
moduletop_module( inputlogicclk, inputlogicreset, inputlogic[31:0]in, outputlogic[31:0]out ); varlogic[31:0]capture,in_reg; always_ff@(posedgeclk)begin if(reset)out<=?'0; ????????else ??????????????????out?<=?capture?; ????end ???? ????always_ff@(posedge?clk)?begin ???????????in_reg?<=?in?; ????end ???? ????assign?capture?=?~in?&?in_reg?|?out; endmodule
點擊Submit,等待一會就能看到下圖結(jié)果:
注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。
這一題就結(jié)束了。
Problem 97-Dualedge
題目說明
熟悉在時鐘上升沿或時鐘下降沿觸發(fā)的觸發(fā)器。在時鐘的兩個邊沿觸發(fā)雙邊觸發(fā)觸發(fā)器。
但是,FPGA 沒有雙邊觸發(fā)觸發(fā)器,并且不接受 @(posedge clk or negedge clk)作為合法的敏感度列表。
構(gòu)建一個功能類似于雙邊觸發(fā)觸發(fā)器的電路:
(注意:不一定完全等效:觸發(fā)器的輸出沒有毛刺,但模擬這種行為的更大組合電路可能。)
圖片來自HDLBits
模塊端口聲明
moduletop_module( inputclk, inputd, outputq );
題目解析
無法在 FPGA 上創(chuàng)建雙邊觸發(fā)觸發(fā)器。但是可以同時創(chuàng)建正沿觸發(fā)和負(fù)沿觸發(fā)觸發(fā)器。
moduletop_module( inputlogicclk, inputlogicd, outputlogicq ); varlogictemp1,temp2; always_ff@(posedgeclk)begin temp1<=?d^temp2?; ????end ???? ????always_ff@(negedge?clk)?begin ????????temp2?<=?d^temp1?; ????end ???? ????assign?q?=?temp1^temp2?; endmodule
點擊Submit,等待一會就能看到下圖結(jié)果:
注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。
這一題就結(jié)束了。
總結(jié)
今天的幾道題就結(jié)束了,對于理解觸發(fā)器的非常有幫助,而且難度稍微增加了,對于閱讀波形設(shè)計邏輯非常有幫助。
審核編輯:劉清
-
時序電路
+關(guān)注
關(guān)注
1文章
114瀏覽量
21696 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61131 -
Verilog語言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8224 -
多路選擇器
+關(guān)注
關(guān)注
1文章
22瀏覽量
6524
原文標(biāo)題:HDLBits: 在線學(xué)習(xí) SystemVerilog(十五)-Problem 90-97(觸發(fā)器和鎖存器(2))
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論