本帖最后由 WeTiGY 于 2016-11-25 23:13 編輯
實(shí)驗(yàn)五 74LS160計(jì)數(shù)器功能模塊一、實(shí)驗(yàn)?zāi)康?/font> 1、學(xué)會(huì)用HDL語(yǔ)言設(shè)計(jì)時(shí)序電路; 2、用HDL語(yǔ)言設(shè)計(jì)74LS160計(jì)數(shù)器功能模塊。 二、硬件需求 EDA/SOPC實(shí)驗(yàn)箱一臺(tái)。 三、實(shí)驗(yàn)原理 計(jì)數(shù)器是最常用的寄存器邏輯電路,從微處理器的地址發(fā)生器到頻率計(jì)都需要用到計(jì)數(shù)器。一般計(jì)數(shù)器可以分為兩類(lèi):加法計(jì)數(shù)器和減法計(jì)數(shù)器。加法計(jì)數(shù)器每來(lái)一個(gè)脈沖計(jì)數(shù)值加1;減法計(jì)數(shù)器每來(lái)一個(gè)脈沖計(jì)數(shù)值減1。 下面將通過(guò)模仿中規(guī)模集成電路74LS160的功能,用HDL語(yǔ)言設(shè)計(jì)一個(gè)十進(jìn)制可預(yù)置計(jì)數(shù)器。74LS160共有一個(gè)時(shí)鐘輸入端CLK,一個(gè)清除輸入端CLR,兩個(gè)計(jì)數(shù)允許信號(hào)P和T,4個(gè)可預(yù)置數(shù)據(jù)輸入端D、C、B、A,一個(gè)置位允許端LOAD,4個(gè)計(jì)數(shù)輸出端QD、QC、QB、QA,一個(gè)進(jìn)位輸出端RC,其工作模式及時(shí)序圖如下表和圖2-14所示。 注:進(jìn)位輸出端RC=Q3&!Q2&!Q1&Q0&T 四、實(shí)驗(yàn)內(nèi)容 本實(shí)驗(yàn)要完成的任務(wù)就是實(shí)現(xiàn)中規(guī)模集成電路74LS160的功能,觀察其工作時(shí)序,并下載到芯片中觀察其實(shí)際工作過(guò)程。實(shí)驗(yàn)時(shí)為了便于觀察,需經(jīng)分頻得到1Hz時(shí)鐘,用撥擋開(kāi)關(guān)的SW1A~SW4A作為計(jì)數(shù)器的輸入D,按鍵F3和F4作為計(jì)數(shù)器的控制允許P和T信號(hào),F(xiàn)2作為清除輸入CLR,用按鍵開(kāi)關(guān)模塊的F1作為L(zhǎng)OAD信號(hào)(注意:由于計(jì)數(shù)器采用的是1Hz時(shí)鐘,而裝載數(shù)據(jù)是在時(shí)鐘信號(hào)的上升沿作用下進(jìn)行,所以要想正確的加載預(yù)制數(shù)據(jù),F1按鍵必須按住至少1s以上才可以),用七段數(shù)碼管模塊中的某一位作為計(jì)數(shù)器的輸出Q指示,用led8作為計(jì)數(shù)器的輸出翻轉(zhuǎn)信號(hào)RC指示。 第一個(gè)是分頻模塊:- module divider_module
- (
- CLK,f_Out
- );
- input CLK;
- output f_Out;
-
- parameter T1s=26'd50_000_000;
- reg [25:0]Count1;
-
- always @ ( posedge CLK )
- if( Count1 == T1s)
- Count1 <= 26'd0;
- else
- Count1 <= Count1 + 1'b1;
-
- reg rf_Out;
- always @ ( posedge CLK )
- if( Count1 >= 26'd0 && Count1 <= 26'd25_000_000)
- rf_Out <= 1'b0;
- else
- rf_Out <= 1'b1;
- assign f_Out = rf_Out;
- endmodule
復(fù)制代碼
第二個(gè)是數(shù)碼管模塊: - module hex_module
- (
- f_Out,hex,Q
- );
- input f_Out;
- input [3:0] Q;
- output [6:0] hex;
-
- reg [6:0] rhex;
- always@(posedge f_Out)
- begin
- case(Q)
- 4'd0 : rhex<=7'b0000001; //0
- 4'd1 : rhex<=7'b1111001; //1
- 4'd2 : rhex<=7'b0010010; //2
- 4'd3 : rhex<=7'b0000011; //3
- 4'd4 : rhex<=7'b1001100; //4
- 4'd5 : rhex<=7'b0100100; //5
- 4'd6 : rhex<=7'b0100000; //6
- 4'd7 : rhex<=7'b0001111; //7
- 4'd8 : rhex<=7'b0000000; //8
- 4'd9 : rhex<=7'b0000100; //9
-
- default: rhex<=7'b0110110; //F
- endcase
- end
- assign hex=rhex;
- endmodule
復(fù)制代碼第三個(gè)是計(jì)數(shù)模塊: - module count_module
- (
- f_Out,RSTn,P,T,LOAD,D,Q,RC
- );
- input f_Out,RSTn,P,T,LOAD;
- input [3:0] D;
- output [3:0] Q;
- output RC;
-
- reg [3:0] Q;
- reg RC;
- always@(posedge f_Out or negedge RSTn)
- if(!RSTn)
- Q<=4'd0;
- else if(!LOAD)
- Q<=D;
- else if(P&T)
- begin
- if(Q<4'd9)
- begin
- Q<=Q+1'b1;
- RC<=1'b0;
- end
- else
- begin
- Q<=4'd0;
- RC<=1'b1;
- end
- end
- else
- Q<=4'd0;
-
- endmodule
復(fù)制代碼
第四個(gè)是頂層模塊:- module top_module
- (
- CLK,RSTn,P,T,LOAD,D,RC,hex
- );
- input CLK,RSTn,P,T,LOAD;
- input [3:0] D;
- output [6:0] hex;
- output RC;
-
- wire f_out;
- divider_module u1
- (
- .CLK(CLK),
- .f_Out(f_Out)
- );
- wire [3:0] Q;
- count_module u2
- (
- .f_Out(f_Out),
- .RSTn(RSTn),
- .P(P),
- .T(T),
- .LOAD(LOAD),
- .D(D),
- .RC(RC),
- .Q(Q)
- );
-
- hex_module u3
- (
- .f_Out(f_Out),
- .Q(Q),
- .hex(hex)
- );
-
-
- endmodule
復(fù)制代碼
注:使用20分頻仿真
仿真圖:
afa.jpg (51.89 KB, 下載次數(shù): 101)
下載附件
2016-11-25 23:00 上傳
|