當前位置:首頁 » 編程軟體 » cnt13模擬時序編譯

cnt13模擬時序編譯

發布時間: 2022-07-28 02:41:48

㈠ 請問VHDL中如果我設置13位比如verilog中data[12:0] 我想用16進制或者10進制在VHDL中要怎麼寫

假設cnt是13位的,cnt:std_logic_vector(12 DOWNTO 0);,對cnt清零可以寫成cnt <= (OTHERS => '0');
因為16進制與二進制之間是2^4關系,而13位是無法表示成十六進制的,所以不能用十六進制來表示。另外,std_logic_vector類型與integer類型是兩種不同的數據類型,而十進制需要用integer類型來表示(integer類型是一個32位的數據類型)。如果非要將一個十進制數賦給一個std_logic_vector類型,則必須經過類型轉換函數才行。這是因為VHDL是強類型語言。

㈡ 跪求:《數字頻率計的設計》 原理,方框圖,電路圖!

摘 要:文中運用VHDL語言,採用Top To Down的方法,實現8位數字頻率計,並利用Isp Expert集成開發環境進行編輯、綜合、波形模擬,並下載到CPLD器件中,經實際電路測試,該系統系統性能可靠。
關鍵詞:EDA;VHDL;數字頻率計;波形模擬;CPLD�
1引言
VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成電路硬體描述語言)誕生於1982年,是由美國國防部開發的一種快速設計電路的工具,目前已經成為IEEE(The Institute of Electrical and Electronics Engineers)的一種工業標准硬體描述語言。相比傳統的電路系統的設計方法,VHDL具有多層次描述系統硬體功能的能力,支持自頂向下(Top to Down)和基於庫(LibraryBased)的設計的特點,因此設計者可以不必了解硬體結構。從系統設計入手,在頂層進行系統方框圖的劃分和結構設計,在方框圖一級用VHDL對電路的行為進行描述,並進行模擬和糾錯,然後在系統一級進行驗證,最後再用邏輯綜合優化工具生成具體的門級邏輯電路的網表,下載到具體的CPLD器件中去,從而實現可編程的專用集成電路(ASIC)的設計。
數字頻率計是數字電路中的一個典型應用,實際的硬體設計用到的器件較多,連線比較復雜,而且會產生比較大的延時,造成測量誤差、可靠性差。隨著復雜可編程邏輯器件(CPLD)的廣泛應用,以EDA工具作為開發手段,運用VHDL語言。將使整個系統大大簡化。提高整體的性能和可靠性。
本文用VHDL在CPLD器件上實現一種8 b數字頻率計測頻系統,能夠用十進制數碼顯示被測信號的頻率,不僅能夠測量正弦波、方波和三角波等信號的頻率,而且還能對其他多種物理量進行測量。具有體積小、可靠性高、功耗低的特點。
2數字頻率計的基本設計原理
數字頻率計的原理框圖如圖1所示。他主要由5個模塊組成,分別是:脈沖發生器電路、測頻控制信號發生器電路、計數模塊電路、鎖存器、解碼驅動電路。�

當系統正常工作時,脈沖發生器提供的1 Hz的輸入信號,經過測頻控制信號發生器進行信號的變換,產生計數信號,被測信號通過信號整形電路產生同頻率的矩形波,送入計數模塊,計數模塊對輸入的矩形波進行計數,將計數結果送入鎖存器中,保證系統可以穩定顯示數據,顯示解碼驅動電路將二進製表示的計數結果轉換成相應的能夠在七段數碼顯示管上可以顯示的十進制結果。在數碼顯示管上可以看到計數結果。�
3設計實現�
3.1系統方框圖的劃分和結構設計
根據數字頻率計的系統原理框圖(圖1虛線框內),設計系統的頂層電路圖如圖2所示。�

圖2中TESTCTL為測頻控制信號發生器。TESTCTL的計數使能信號TSTEN能產生一個1 s寬的周期信號,並對頻率計的每一計數器CNT10的ENA使能端進行同步控制:當TSTEN高電平時允許計數、低電平時停止計數。
REG32B為鎖存器。在信號Load的上升沿時,立即對模塊的輸入口的數據鎖存到REG32B的內部,並由REG32B的輸出端輸出,然後,七段解碼器可以解碼輸出。在這里使用了鎖存器,好處是可以穩定顯示數據,不會由於周期性的清零信號而不斷閃爍。
CNT10為十進制計數器。有一時鍾使能輸入端ENA,用於鎖定計數值。當高電平時允許計數,低電平時禁止計數。圖2中將8個十進制計數器CNT10級聯起來實現8 b十進制計數功能。
SEVYM為七段解碼顯示驅動電路,可以將頻率計數的結果譯成能在數碼管上顯示相對應的阿拉伯數字,便於讀取測量的結果。
為了實現系統功能,測頻控制信號發生器TESTCTL、計數器CNT10、鎖存器REG32B存在一個工作時序的問題,設計時需要綜合考慮。
圖3給出了系統的工作時序。圖3中CLK是由圖1中脈沖發生器產生的頻率為1 Hz的標准時鍾信號,當測頻控制信號發生器TESTCTL的TSTEN端為高電平時允許計數、低電平時停止計數,在停止計數期間,測頻控制信號發生器TESTCTL的Load端產生一個上升沿,將計數器在前1 s的計數值鎖存進32 b鎖存器REG32B中,並由8個7段解碼器將計數結果譯出穩定顯示。鎖存信號之後經過半個CLK周期,測頻控制信號發生器TESTCTL的CLR�_CNT端產生一個上升沿,對計數器進行清零。為下1 s的計數操作做准備。
為了產生這個時序圖,首先有一個D觸發器構成二分頻器,在每次時鍾CLK的上升沿到來使其值翻轉。D觸發器的輸出高電平正好是1 s,因此可以作為測頻控制信號發生器TESTCTL的TSTEN端,用來控制計數。而Load信號正好是TSTEN端信號的翻轉。在計數結束後半個CLK周期,CLK與TSTEN都為低電平,這時CLR�_CNT產生一個上升沿作為清零信號。�

3.2各模塊的VHDL源程序
採用VHDL描述數字頻率計的電路時,根據圖2所示的數字頻率計系統頂層電路圖,按照自頂向下的設計思路,編寫各個模塊的VHDL源程序,最後再對各個模塊進行組合,編寫頂層描述的VHDL源程序,由於篇幅所限,本文僅介紹數字頻率計頂層描述的源程序,各個模塊的VHDL源程序編寫較為簡單,可以根據各自的功能,相應地寫出。
8位數字頻率計的頂層描述VHDL源程序為:

4系統的功能模擬
Lattice公司推出的Isp Expert的數字系統設計軟體,是一套完整的EDA軟體,能夠對所設計的數字電子系統進行時序模擬和功能模擬。
採用Lattice公司推出的Isp Expert EDA軟體,對所編寫數字頻率計VHDL源程序進行編譯、邏輯綜合,自動地把VHDL描述轉變為門級電路。然後進行波形模擬,編寫的模擬測試向量文件如下(為模擬簡單起見,測試一個66 Hz的周期信號):

模擬後得到的波形圖如圖4所示,從模擬波形上看測量的結果是准確的。還可以進一步修改測試向量文件,進行波形模擬。最後通過編程電纜,將所設計的內容下載到CPLD器件中,進行實物模擬。�

5結語
本文介紹了使用VHDL語言設計數字頻率計的方法,並下載到CPLD中組成實際電路,這樣可以簡化硬體的開發和製造過程,而且使硬體體積大大縮小,並提高了系統的可靠性。同時在基本電路模塊基礎上,不必修改硬體電路,通過修改VHDL源程序,增加一些新功能,滿足不同用戶的需要,實現數字系統硬體的軟體化。

㈢ 新手求教,quartus 時序模擬cnt_rst出現毛刺,代碼如下

搜一下:新手求教,quartus
時序模擬cnt_rst出現毛刺,代碼如下

㈣ 簡易交通燈控制器

本設計中選用目前應用較廣泛的VHDL硬體電路描述語言,實現對路口交通燈系統的控制器的硬體電路描述,在Altera公司的EDA軟體平台MAX+PLUSⅡ環境下通過了編譯、模擬,並下載到CPLD器件上進行編程製作,實現了交通燈系統的控制過程。 關鍵詞:EDA;VHDL;控制器;CPLD

引言

EDA技術是用於電子產品設計中比較先進的技術,可以代替設計者完成電子系統設計中的大部分工作,而且可以直接從程序中修改錯誤及系統功能而不需要硬體電路的支持,既縮短了研發周期,又大大節約了成本,受到了電子工程師的青睞。

實現路口交通燈系統的控制方法很多,可以用標准邏輯器件、可編程序控制器PLC、單片機等方案來實現。但是這些控制方法的功能修改及調試都需要硬體電路的支持,在一定程度上增加了功能修改及系統調試的困難。因此,在設計中採用EDA技術,應用目前廣泛應用的VHDL硬體電路描述語言,實現交通燈系統控制器的設計,利用MAXPLUSⅡ集成開發環境進行綜合、模擬,並下載到CPLD可編程邏輯器件中,完成系統的控製作用。

交通燈系統控制器設計要求

路口交通燈控制系統與其他控制系統一樣,劃分為控制器和受控電路兩部分。控制器使整個系統按設定的工作方式交替指揮車輛及行人的通行,並接收受控部分的反饋信號,決定其狀態轉換方向及輸出信號,控制整個系統的工作過程。

按照路口交通運行的實際情況,在本系統中,設定系統的工作情況如下。

路口交通燈控制系統的東西路有交通燈R(紅)、Y(黃)、G(綠);東西人行安全通道燈:RXR(紅)、RXG(綠)。南北路有交通燈:r1(紅)、y1(黃)、g1(綠);南北人行安全通道燈:rxr1(紅)、rxg1(綠),所有燈均為高電平點亮。設置15s的通行時間和5s轉換時間的變模定時電路,由預置輸入整數cnt決定是模15還是模5,輸入邏輯cx是用來決定計數到4時清零還是到14時清零。Clk是外部提供的基準秒脈沖信號。x0、x1、x2、x3是由控制器輸出的表示計數時間的四位二進制數。圖1是該系統控制器的符號框圖。

控制器的程序設計

* 控制器的ASM圖

根據系統設計要求,得到控制器的ASM圖,如圖2所示。在這里,所有輸入信號均為高電平有效。該ASM圖反映了交通燈系統的不同狀態的轉換過程及持續時間。

* 控制器的VHDL程序設計

根據所分析的系統的ASM圖,結合系統的設計要求,用VHDL語言對各個模塊進行編程,最後形成頂層文件,在MAX+PLUSⅡ環境下進行編譯與模擬,檢查所編程序是否運行正確。如果出現錯誤,需要進行修改,直到完全通過為止。需要說明的是,在進行程序編譯時,要先從底層程序開始,所有底層程序都正確後,才能開始頂層程序的編譯。這是因為頂層程序是對底層程序的概括,它是把底層程序各個模塊連接起來,就相當於把每個模塊的功能匯聚到一起,實現整個系統的控制功能,所以底層程序的正確與否,關繫到頂層程序的運行結果。

在控制器的程序設計中,在定義結構體時,有兩種程序設計方法均可以通過編譯及模擬,但在進行時序分析時結果卻不同。

(1)如果這樣定義:

...
ARCHITECTURE con1_arc of con1 IS
SIGNAL current_state:state;
BEGIN
...

在進行程序調試時,均通過了編譯及模擬,但在進行時序分析中,卻出現了不按設定的計數順序工作的結果:14, 13, 2,1, 0...。經過反復修改調試,對程序進行了修改,如(2)所定義的。

(2)

ARCHITECYTURE con1_arc OF con1 IS
SIGNAL current_state:state;
SIGNAL TEMP_STATE:state;
...
TEMP STATE<=current_state;
BEGIN
...

在這種設計方法中,多定義了一個信號變數,從而使得程序能按設定的狀態14,13,12...進行轉換。通過這個實例,可以看出EDA技術作為電子設計工具的功能修改及調試的方便快捷,即不需要硬體電路的支持就可以找到問題所在並進行修改,體現了它的優越性。

硬體電路實現

根據交通燈系統的控制要求,圖3所示為本系統的硬體電路圖。該電路包含了1個CPLD晶元,2個七段LED數碼顯示器,20個分別表示各個方向上的紅、黃、綠燈,以及相應的限流電阻。這個電路與其他控制方法相比,所用器件可以說是比較簡單經濟的。經過實驗,實現了預定的交通燈系統的控制功能。

或單片機,PLC教材上有實例.

㈤ modelsim時序模擬時** Error: (vsim-SDF-3894) cnt_v.sdo: Compiled SDF file was not found.

提示你反標的sdf文件沒有找到,查查你指定的路徑下有沒有對應的sdf文件,或者查看一下你的sdf文件格式是不是正確!

㈥ quartus 時序模擬輸出全是不定態

clr既沒有賦予初值,也沒有有效的波形激勵,導致初始狀態s0無法確定,所以輸出都無法確定。

㈦ verilog開發,功能級模擬,綜合後模擬,時序模擬有什麼區別

╮(╯▽╰)╭為什麼總是糾結在這些上面呢。
1。所謂功能模擬,就是你的code寫完之後,你要實現的功能是否能work,比如你寫一個計數器,讓他計數到10,翻轉,同時清零,重新計數,這就會是一個分頻電路。那麼功能模擬就是要驗證你這個功能是否是正確的,別tmd計數到9就翻了,或者計數到10沒有清0。功能模擬當然不考慮競爭冒險和門電路延遲,你只是看你的功能是否正確,你考慮延遲幹嘛。
2。所謂綜合後模擬,就是你剛才編出來的代碼,第一個是否能被綜合工具綜合,如果可以綜合,此時綜合工具就會把相關的延遲信息加入進來,以判斷你的代碼是否會有什麼問題,比如你要求的始終太快,cnt計數就會有問題了。此時的綜合工具如synplify,xst,quatus(針對FPGA,如果是IC,會用dc等別的),如果你用quatus去跑跑模擬,就會比較清晰的看到延遲信息已經加入進來了
3。時序模擬是在IC上的了,各種timing問題了。FPGA就直接上板了,做那麼多模擬毛用,直接上板,各種timing問題等著去解吧。
4。Modesim一般只用來功能模擬,它不能綜合。

㈧ 跪求 用VHDL語言設計模為330,,BCD碼輸出計數器(時序模擬),求高手解答。

我來貢獻一個通用的BCD counter

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.ALL;

ENTITY bcd_cnt_1r0 IS
GENERIC(num_bit : INTEGER := 3; -- 位數
norm : INTEGER := 331); -- 模
PORT(clk : IN STD_LOGIC;
rst : IN STD_LOGIC;
cnt_en : IN STD_LOGIC;
bcd_out : OUT STD_LOGIC_VECTOR(num_bit * 4 - 1 DOWNTO 0));
END bcd_cnt_1r0;

ARCHITECTURE rtl OF bcd_cnt_1r0 IS

CONSTANT ONES : STD_LOGIC_VECTOR(num_bit DOWNTO 0) := (OTHERS=>'1');

SIGNAL next_cnt : UNSIGNED(num_bit * 4 - 1 DOWNTO 0) := (OTHERS=>'0');
SIGNAL curr_cnt : UNSIGNED(num_bit * 4 - 1 DOWNTO 0) := (OTHERS=>'0');
SIGNAL carray_in : STD_LOGIC_VECTOR(num_bit DOWNTO 0):=(OTHERS=>'0');

FUNCTION dec2unsigned (dec_val: INTEGER; dec_bit : INTEGER) RETURN UNSIGNED IS
VARIABLE result: UNSIGNED(dec_bit*4 - 1 DOWNTO 0);
VARIABLE tmp : INTEGER := dec_val;
VARIABLE tmp2 : INTEGER := 0;
BEGIN
FOR i IN 1 TO dec_bit LOOP
tmp2 := (tmp/10);
result(i*4-1 DOWNTO (i-1)*4) := TO_UNSIGNED(tmp - tmp2 * 10, 4);
tmp := tmp2;
END LOOP;
RETURN result;
END dec2unsigned;

CONSTANT unsign_norm : UNSIGNED(num_bit * 4 - 1 DOWNTO 0) := dec2unsigned(norm, num_bit);

TYPE dec_array_type IS ARRAY(num_bit-1 DOWNTO 0) OF UNSIGNED(3 DOWNTO 0);
SIGNAL debug_dec_cnt_bit : dec_array_type :=(OTHERS=>(OTHERS=>'0'));

BEGIN

reg_proc: PROCESS(clk)
BEGIN
IF RISING_EDGE(clk) THEN
IF rst = '1' THEN
curr_cnt <= (OTHERS=>'0');
ELSE
IF cnt_en = '1' THEN
IF next_cnt = unsign_norm THEN
curr_cnt <= (OTHERS =>'0');
ELSE
curr_cnt <= next_cnt;
END IF;
END IF;
END IF;
END IF;
END PROCESS;

bcd_out <= STD_LOGIC_VECTOR(curr_cnt);

cnt_proc: PROCESS(curr_cnt, next_cnt, carray_in, rst)
BEGIN
carray_in(0) <= '1';

IF rst = '1' THEN
next_cnt <= (OTHERS=>'0');
carray_in( num_bit DOWNTO 1) <= (OTHERS=>'0');
ELSE
bits_loop: FOR n IN 0 TO num_bit-1 LOOP
IF carray_in(n) = '1' THEN
IF curr_cnt(4*(n+1)-1 DOWNTO 4*n) = 9 THEN
next_cnt(4*(n+1)-1 DOWNTO 4*n) <= (OTHERS=>'0');
carray_in(n+1) <= '1';
ELSE
next_cnt(4*(n+1)-1 DOWNTO 4*n) <= curr_cnt(4*(n+1)-1 DOWNTO 4*n) + 1;
carray_in(n+1) <= '0';
END IF;
------------------------------
ELSE
next_cnt(4*(n+1)-1 DOWNTO 4*n) <= curr_cnt(4*(n+1)-1 DOWNTO 4*n);
carray_in(n+1) <= '0';
END IF;
END LOOP;
END IF;
END PROCESS;

debug_gen: FOR n IN 0 TO num_bit -1 GENERATE
debug_dec_cnt_bit(n) <= curr_cnt((n+1)*4 -1 DOWNTO n*4);
END GENERATE;

END rtl;

㈨ 關於C語言編程的問題:一段代碼在VC++軟體運行中會出現兩種結果

我若是你,就將下面的代碼換成 for(i=0;i<200;i++) { a4=a[i]/1000; a3=a[i]%1000/100; a2=a[i]%100/10; a1=a[i]%10; if(a4%2==1 && a3%2==1 && a2%2==1 && a1%2==1) { b[cnt]=a[i]; cnt++; } } int t[4],cnt=0; char flag; for(i=0;i<200;i++) { temp=a[i]; flag=1; for(j=0;j<4;j++) { t[j]=temp%10; if(t[j]%2==0) { flag=0; break; } temp=temp/10; } if(flag) { b[cnt]=a[i]; cnt++; } }

㈩ Modelsim-Altera SE時序模擬,一信號某幾位始終處於高阻態

看你寫的代碼感覺很多語法問題,一般情況下輸入端沒有被賦予初值在modelsim模擬時就會是高組態,對比A和B,A是高組態,B不是,就噶西安你的testbench代碼中給A賦值時,「 』 」號後面的的進制數寫成大寫了,你可以將他們都改成小寫試試。你的輸出高組態,我覺得是div代碼中」 output reg [27:0]C; 「這句代碼有問題,C是輸出應該是wire型,而不是寄存器型,說到這里你在testbench代碼中也將A和B用成reg型,感覺這樣不合理。不知道能不能解決你的問題,但是幫你看看語法,可以再模擬試試,你自己也可以在模擬編譯的時候留意下編譯欄看有沒有報錯或者警告。如果還有問題請留言。

熱點內容
ubuntu搭建samba伺服器 發布:2025-02-07 05:52:54 瀏覽:54
小型企業網如何配置可以互通 發布:2025-02-07 05:33:56 瀏覽:243
09年crv哪個配置好 發布:2025-02-07 05:17:31 瀏覽:555
nvm源碼編譯 發布:2025-02-07 05:13:19 瀏覽:126
防偽碼查詢源碼 發布:2025-02-07 05:09:39 瀏覽:769
安卓機的通知在哪裡 發布:2025-02-07 05:09:01 瀏覽:282
密碼74是什麼意思 發布:2025-02-07 05:02:10 瀏覽:47
蘋果es瀏覽器無法連接ftp 發布:2025-02-07 04:59:57 瀏覽:285
javaa和a 發布:2025-02-07 04:58:24 瀏覽:64
應用鎖的密碼在哪裡查 發布:2025-02-07 04:47:25 瀏覽:507