請(qǐng)教一個(gè)VHDL問題
- 資格考試
- 2022-10-03 12:58:44
你好!我還想請(qǐng)教一個(gè)關(guān)于VHDL語言編程問題,不過沒有分?jǐn)?shù)可以給你了。
這個(gè)程序里面比較難的就是當(dāng)U1=1時(shí)閃煉變化,這里我用一個(gè)狀態(tài)機(jī)來描述,ST0表示U1為0時(shí)的狀態(tài),ST1表示U1為1的狀態(tài),當(dāng)U1為0時(shí),這時(shí)就相當(dāng)于一個(gè)計(jì)數(shù)器,每隔2S加1,當(dāng)U1=1時(shí),我就讓他每隔2S閃煉一次,即每隔2S對(duì)輸出取一次反(具體要怎么閃煉你可以自行決定),當(dāng)閃煉5次時(shí)即10S后,他又繼續(xù)輸出下個(gè)狀態(tài)。以下是我的程序,希望是你想要的!?。?! LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY KKK IS PORT(U1,CLK,RESET:IN STD_LOGIvhdl中的一個(gè)問題,菜鳥問各位
您好,這樣的: 問題在于signal 和variable 的區(qū)別:signal賦值一般認(rèn)為在進(jìn)程結(jié)束后(反正有個(gè)延時(shí))才把值賦給信號(hào),variable是立刻把值賦給變量.... 你把j、t定義為信號(hào),等于說你賦值是要等到進(jìn)程完后才賦值,而LOOP語句必須是循環(huán)變量范圍不滿足條件后才結(jié)束,等于進(jìn)程只執(zhí)行一次,LOOP語句要執(zhí)行30次...而信號(hào)要在進(jìn)程完后才賦值...你說結(jié)果如何哎?可以這樣認(rèn)為for語句執(zhí)行時(shí),整個(gè)語句的執(zhí)行時(shí)間小于信號(hào)賦值的時(shí)間,當(dāng)信號(hào)還沒有賦值是for又開始執(zhí)行了... j、t一直得不到賦值 , 變量在仿真時(shí)是不可見的。VHDL代碼問題
這個(gè)代碼的用途從entity的port部分就基本上可以看出端倪來。 首先是有三個(gè)端口,一個(gè)是外部時(shí)鐘得到100MHz的信號(hào),這個(gè)是從板載晶震上面得到的。 之后第二個(gè)端口clkOut100kHz,是從100MHz上面截取的100kHz的輸出。 之后第三個(gè)端口是reset,從已經(jīng)連接的端口上得到高電平出發(fā)重置。 簡(jiǎn)單說一下VHDL clkSys100MHz : in STD_LOGIC; 意思是,針腳clkSys100MHz,輸入,標(biāo)準(zhǔn)邏輯庫,二值,只有‘0’和‘1’兩種狀態(tài)。 那么 clkOut100KHz : out STD_LOGIC; 意思是,針腳clkOut100KHz,輸出,標(biāo)準(zhǔn)邏輯庫VHDL編程出了什么問題?
以上是屬于多時(shí)鐘問題!在設(shè)計(jì)時(shí)往往會(huì)遇到這種情況,需要對(duì)外部某個(gè)輸入信號(hào)進(jìn)行判斷,當(dāng)其出現(xiàn)上跳或下跳沿時(shí),執(zhí)行相應(yīng)的操作,而該信號(hào)不像正常時(shí)鐘那樣具有固定占空比和周期,而是很隨機(jī),需要程序設(shè)計(jì)判斷其上跳沿出現(xiàn)與否。就會(huì)寫出如上程序! 解決的辦法可以如下,將clk1和key2 增加一級(jí)狀態(tài) lcx 寄存,通過對(duì) clk1或key2 和lcx狀態(tài)判斷上跳與否,改正程序如下: signal lcx:std_logic; signal a,count3:integer; begin process(en,clk) begin if en='1' then if clk'event and clk='1vhdl的問題
你這樣寫是不對(duì)的,一個(gè)進(jìn)程里出現(xiàn)了兩個(gè)時(shí)鐘沿判斷。 可以這樣寫 process(clk,fn,rst) variable delay_1 , delay_2;std_logic; begin if rst = '0' then acc <= (others=>'0'); nc <= (others=>'0'); elsif clk'event and clk = '1' then if delay_2 = '0' and delay_1 = '1' then ( 中間的我就不寫了哈,打字也蠻費(fèi)時(shí)間的:) ) end if; delay_2 := delay_1; delay_1 := fn;展開全文閱讀