基于Verilog 的任意模長(zhǎng)可加減計(jì)數(shù)器設(shè)計(jì)_第1頁(yè)
基于Verilog 的任意模長(zhǎng)可加減計(jì)數(shù)器設(shè)計(jì)_第2頁(yè)
基于Verilog 的任意模長(zhǎng)可加減計(jì)數(shù)器設(shè)計(jì)_第3頁(yè)
基于Verilog 的任意模長(zhǎng)可加減計(jì)數(shù)器設(shè)計(jì)_第4頁(yè)
基于Verilog 的任意模長(zhǎng)可加減計(jì)數(shù)器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于Verilog 的任意模長(zhǎng)可加減計(jì)數(shù)器設(shè)計(jì)一、 設(shè)計(jì)要求計(jì)數(shù)器是一種在時(shí)鐘的觸發(fā)下,完成計(jì)數(shù)功能的時(shí)序邏輯電路,輸出結(jié)果由輸入時(shí)鐘和計(jì)數(shù)器上一狀態(tài)的計(jì)數(shù)共同決定。本設(shè)計(jì)要求實(shí)現(xiàn)的計(jì)數(shù)器,具有以下功能:(1) 要求實(shí)現(xiàn)計(jì)數(shù)器工作狀態(tài)的控制;(2) 要求實(shí)現(xiàn)計(jì)數(shù)器的異步清零功能;(3) 要求實(shí)現(xiàn)計(jì)數(shù)器遞增和遞減的功能;(4) 要求實(shí)現(xiàn)計(jì)數(shù)器的計(jì)數(shù)范圍(模長(zhǎng))任意改變;二、 設(shè)計(jì)思路計(jì)數(shù)器工作狀態(tài)的控制,可以設(shè)計(jì)一個(gè)使能端,在外部時(shí)鐘的觸發(fā)下,只有當(dāng)使能端信號(hào)有效(高電平),才啟動(dòng)計(jì)數(shù)器的計(jì)數(shù)功能(遞增或遞減),否則計(jì)數(shù)器輸出結(jié)果不變。計(jì)數(shù)器的異步清零功能,可以設(shè)計(jì)一個(gè)外部輸入的清零端,在外部輸

2、入信號(hào)有效(低電平)的情況下,直接清零計(jì)數(shù)器,不用等待下一個(gè)外部時(shí)鐘的觸發(fā),即計(jì)數(shù)器的清零是異步的。計(jì)數(shù)器計(jì)數(shù)方向的控制,設(shè)計(jì)一個(gè)加減可控的信號(hào)端口,在時(shí)鐘的觸發(fā)、異步清零無(wú)效以及計(jì)數(shù)器使能端有效的情況下,該輸入端為高電平則計(jì)數(shù)器完成遞增功能,低電平則完成遞減功能。實(shí)現(xiàn)計(jì)數(shù)器的任意模長(zhǎng),即進(jìn)入下一個(gè)計(jì)數(shù)周期,其計(jì)數(shù)的最大值可以發(fā)生變化。設(shè)計(jì)一個(gè)4位(最大模長(zhǎng)為16)的輸入端口,可以在當(dāng)前計(jì)數(shù)周期結(jié)束,即計(jì)數(shù)器產(chǎn)生一個(gè)溢出信號(hào)的同時(shí),判斷該端口輸入的信號(hào)是否發(fā)生變化,通過(guò)相鄰兩個(gè)計(jì)數(shù)周期的端口數(shù)據(jù)作異或運(yùn)算,結(jié)果為高電平則代表模長(zhǎng)發(fā)生變化,即進(jìn)入的下一個(gè)計(jì)數(shù)周期,其計(jì)數(shù)最大值要發(fā)生變化。三、 程

3、序設(shè)計(jì)本次設(shè)計(jì)使用的是Quartus 11.0開(kāi)發(fā)環(huán)境,該軟件沒(méi)有自帶仿真功能(9.0版本以后都沒(méi)自帶),需要使用第三方的Modelsim軟件,故本設(shè)計(jì)的程序包括計(jì)數(shù)器的Verilog設(shè)計(jì)以及仿真測(cè)試需要的testbench激勵(lì)文件兩部分。計(jì)數(shù)器的Verilog設(shè)計(jì):module Prj(clk,rst_input,en,add_sub,data_input,full,data_output);input clk; / 外部時(shí)鐘input rst_input; / 外部清零(異步)input en; / 計(jì)數(shù)使能input add_sub; / 計(jì)數(shù)方向input 3:0 data_input

4、; / 計(jì)數(shù)器模長(zhǎng)輸入output reg full; / 計(jì)完當(dāng)前模長(zhǎng)output 3:0 data_output; / 計(jì)數(shù)器輸出reg 3:0 current_counter;/ 當(dāng)前計(jì)數(shù)值(輸出)reg update_length_en; / 改變模長(zhǎng)的使能信號(hào)/ 當(dāng)前計(jì)數(shù)周期與上個(gè)計(jì)數(shù)周期的模長(zhǎng)輸入reg 3:0 current_clk_data_input,last_clk_data_in put;reg 3:0 counter_length; / 下個(gè)計(jì)數(shù)周期的模長(zhǎng)reg 1:0 k;always (posedge clk,negedge rst_input)beginif(!r

5、st_input) / 異步清零beginfull=0;current_counter=0;endelse if(en) / 計(jì)數(shù)使能begin if(add_sub) / 加法器beginif(current_counter<(counter_length-1) begin current_counter=current_counter+1;full=0;endelse / 加法器計(jì)數(shù)完產(chǎn)生full脈沖以觸發(fā)/ 判斷下個(gè)計(jì)數(shù)周期的模長(zhǎng)是否變化begincurrent_counter=0;full=1; /full輸出 endendelse / 減法器beginif(current_co

6、unter>0)begincurrent_counter=current_counter-1;full=0;endelse / 減法器計(jì)數(shù)完begin current_counter=counter_length-1;full=1;endendendend/驅(qū)動(dòng)當(dāng)前計(jì)數(shù)輸出assign data_output=current_counter;initialbegink=1; / k=1 表示啟動(dòng)計(jì)數(shù)器的第一個(gè)計(jì)數(shù)周期endalways (posedge full) / 加法器/減法器完成當(dāng)前周期計(jì)數(shù)/ 計(jì)完當(dāng)前周期(即full有效)才更新begin last_clk_data_input

7、<=data_input; / 上個(gè)周期的模長(zhǎng)current_clk_data_input=data_input;/當(dāng)前周期的模長(zhǎng)update_length_en<=last_clk_data_inputcurrent_clk_data_input; / update_length_en為更新計(jì)數(shù)器模長(zhǎng)的使能端,/ 異或運(yùn)算 使能端為0代表模長(zhǎng)變化 1不變k=k+1; / k的初值為1,k變化說(shuō)明計(jì)數(shù)模長(zhǎng)更改過(guò)了if(k=2'd3)k=2;endalways (posedge clk)beginif(update_length_en) / 使能有效計(jì)數(shù)模長(zhǎng)變化counter

8、_length=current_clk_data_input; elsebeginif(k>=2)/ 下個(gè)周期計(jì)數(shù)器模長(zhǎng)不變(保持上次更改的)counter_length=last_clk_data_input; if(k=1)/ 整個(gè)計(jì)數(shù)器系統(tǒng),最初的模長(zhǎng)(一次沒(méi)更改過(guò))counter_length=data_input; endendendmodule測(cè)試激勵(lì)文件testbench:timescale 1 ps/ 1 psmodule Prj_vlg_tst();reg add_sub;reg clk;reg 3:0 data_input;reg en;reg rst_input;

9、wire 3:0 data_output;wire full; Prj i1 (.add_sub(add_sub),.clk(clk),.data_input(data_input),.data_output(data_output),.en(en),.full(full),.rst_input(rst_input);parameter clk_period=10; / 時(shí)鐘周期initial / 初始化使能端、清零端和時(shí)鐘信號(hào) begin en=1;rst_input=1;clk=1;#(46*clk_period) en=0;#(3*clk_period) en=1;#(4*clk_per

10、iod) rst_input=0;#(2*clk_period) rst_input=1;endalways #(clk_period/2) clk=clk; initialbegin/ 計(jì)數(shù)器模長(zhǎng)分別為6 4 5 3/ 左邊為上一模長(zhǎng)持續(xù)的時(shí)鐘個(gè)數(shù)data_input=4'b0110; #(22*clk_period) data_input=4'b0100;#(12*clk_period) data_input=4'b0101;#(12*clk_period) data_input=4'b0011;#(5*clk_period);endinitialbegin/ 計(jì)數(shù)器計(jì)數(shù)方向的改變/ 左邊為遞增遞減持續(xù)的時(shí)鐘個(gè)數(shù)add_sub=1;#(9*clk_period) add_sub=0;#(10*clk_period) add_sub=1;#(13*clk_period) add_sub=0;#(4*clk_period) add_sub=1;end endmodule四、 仿真結(jié)果如圖1所示,最開(kāi)始計(jì)數(shù)器輸入的模長(zhǎng)data_input為6,在計(jì)數(shù)方向控制端add_sub為高電平的情況下,可以從0計(jì)數(shù)到5,在add_sub為低電平的情況下,可以實(shí)現(xiàn)計(jì)數(shù)器的遞減;當(dāng)計(jì)數(shù)器模長(zhǎng)data_input

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論