有關於vhdl的問題 |
答題得分者是:addn
|
極光
初階會員 發表:32 回覆:96 積分:40 註冊:2005-01-16 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
有點浪費IC...
你可以用移位的方式,直接左移右移.然後直接輸出.delay時間可以自己設. 假設8個led則=> 00000001 -> 00000010 -> 00000100.....10000000 -> 01000000 .... 以此類推
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
極光
初階會員 發表:32 回覆:96 積分:40 註冊:2005-01-16 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 的確耶!我也覺得挺浪費的 但是用移位的要可以移回來嗎! 0001->0010->0100->1000->0100->0010->0001 我要的是這樣!移位我也有考慮過,但是還是卡在那(紅色那段)設個bit做判斷,當=0001時為0 =>左移,當=1000時為1=>右移 以這樣的概念去寫就好了,這個不難!!
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
極光
初階會員 發表:32 回覆:96 積分:40 註冊:2005-01-16 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
|
極光
初階會員 發表:32 回覆:96 積分:40 註冊:2005-01-16 發送簡訊給我 |
引言: 可以做一個reset來做初始值 ex:暫存器要這麼寫呢?書上沒有寫耶! 還有我左移完後要右移既然不行耶! IF (CLK'EVENT AND CLK='1') THEN QN(15)<=D; FOR I IN 1 TO 15 LOOP QN(15-I)<=QN(16-I); END LOOP; ELSEIF (QN(0)='1') THEN FOR I IN 15 DOWNTO 1 LOOP QN(16-I)<=QN(15-I); END LOOP; 這樣寫不行耶!電腦都說我有錯誤! 還有問一個小問題喔!我用max plus的圖形編輯器 然後將我之前的小程式變成電路符號 然後我將這兩個電路符號用圖形編輯器做編輯 做組譯並沒有問題,但是要模擬時卻發生問題了 會出現下面這行字"Installed hardware does not support Use Device option" 這是什麼意思阿!但是沒有使用到*.SYM的話 我都可以模擬耶!真是奇怪阿!IF(reset='1') THEN count<=10000000; ELSIF(clk'EVENT AND clk='1') THEN . . . . END IF; |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 暫存器要這麼寫呢?書上沒有寫耶! 還有我左移完後要右移既然不行耶! [code] IF (CLK'EVENT AND CLK='1') THEN QN(15)<=D; FOR I IN 1 TO 15 LOOP QN(15-I)<=QN(16-I); END LOOP; ELSEIF (QN(0)='1') THEN FOR I IN 15 DOWNTO 1 LOOP QN(16-I)<=QN(15-I); END LOOP; 這樣寫不行耶!電腦都說我有錯誤! 還有問一個小問題喔!我用max plus的圖形編輯器 然後將我之前的小程式變成電路符號 然後我將這兩個電路符號用圖形編輯器做編輯 做組譯並沒有問題,但是要模擬時卻發生問題了 會出現下面這行字"Installed hardware does not support Use Device option" 這是什麼意思阿!但是沒有使用到*.SYM的話 我都可以模擬耶!真是奇怪阿!1>你最後少了一個end if 2>po程式碼請縮排,不知如何做請看版規 3>位移我記得有專門的指令,不須這樣寫,找一下吧! 3>我不曉得你是怎麼模擬的,一般組譯ok會有一個*.scf,利用這個檔便可以模擬
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
你移位暫存器條件判斷寫法有問題 請參考下列code
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY test11 IS PORT (clk,reset: IN STD_LOGIC; counter:OUT STD_LOGIC_VECTOR(7 DOWNTO 0 )); END test11; ARCHITECTURE a OF test11 IS SIGNAL temp:STD_LOGIC_VECTOR(7 DOWNTO 0 ); SIGNAL flag:STD_LOGIC; BEGIN PROCESS(clk) BEGIN IF(reset='1') THEN temp<="00000001"; flag<='0'; ELSIF(clk'EVENT AND clk='1') THEN IF(flag='0') THEN temp(7 downto 1)<=temp(6 downto 0); temp(0)<='0'; IF(temp(6)='1') THEN flag<='1'; END IF; ELSE temp(6 downto 0)<=temp(7 downto 1); temp(7)<='0'; IF(temp(1)='1') THEN flag<='0'; END IF; END IF; END IF; END PROCESS; counter<=temp; END a;還有用create symbol方式 要將.sym所在之目錄加入libraries 選options 選 Use libraries 再將目錄加入 這樣就可以使用了 |
sn903209
初階會員 發表:53 回覆:86 積分:32 註冊:2005-03-27 發送簡訊給我 |
|
極光
初階會員 發表:32 回覆:96 積分:40 註冊:2005-01-16 發送簡訊給我 |
引言: 你移位暫存器條件判斷寫法有問題 請參考下列code好神奇喔!這的可以達到我要的目的耶!不過程式有些地方看不懂耶! "FLAGE"是幹嘛的阿?不懂它在程式中的功能是什麼耶! 還有移位的方式我也看不太懂耶!可以解譯一下嗎? 因為我翻了兩本書,移位暫存器的寫法都用FOR LOOP寫的 所以大大這種寫法看不懂耶! 不過還是感謝各位的回答!VHDL真是不太好學耶! 自己自修有點難弄懂耶!在單晶片中最簡單的霹靂燈都弄不出來阿!LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY test11 IS PORT (clk,reset: IN STD_LOGIC; counter:OUT STD_LOGIC_VECTOR(7 DOWNTO 0 )); END test11; ARCHITECTURE a OF test11 IS SIGNAL temp:STD_LOGIC_VECTOR(7 DOWNTO 0 ); SIGNAL flag:STD_LOGIC; BEGIN PROCESS(clk) BEGIN IF(reset='1') THEN temp<="00000001"; flag<='0'; ELSIF(clk'EVENT AND clk='1') THEN IF(flag='0') THEN temp(7 downto 1)<=temp(6 downto 0); temp(0)<='0'; IF(temp(6)='1') THEN flag<='1'; END IF; ELSE temp(6 downto 0)<=temp(7 downto 1); temp(7)<='0'; IF(temp(1)='1') THEN flag<='0'; END IF; END IF; END IF; END PROCESS; counter<=temp; END a;還有用create symbol方式 要將.sym所在之目錄加入libraries 選options 選 Use libraries 再將目錄加入 這樣就可以使用了 |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
flag是用來判斷是否位移到最左邊了,以準備改為右移.
不過這個判斷好像該改為:
IF(temp(7)='1') THEN flag<='1'; END IF;addn兄的這兩行寫法: temp(7 downto 1)<=temp(6 downto 0); temp(0)<='0';可改為: temp<=temp(6 downto 0) & '0';意思是一樣的,你玩玩看就知道了. VHDL 與 Verilog HDL ,Verilog 比較好學,因為它比較像C VHDL支援的會比較多,去找找專門講VHDL的書你就知道了. 發表人 - ㊣ 於 2005/05/22 18:23:00
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
㊣ 大大 說的沒錯 而且
temp(7 downto 1)<=temp(6 downto 0); temp(0)<='0';跟你用 FOR LOOP 方式意義上是一樣的,都可以 flag是作為判斷左右移的作用,flag=0左移 flag=1右移 但是 . . IF(temp(6)='1') THEN flag<='1'; END IF . . IF(temp(1)='1') THEN flag<='0'; END IF . .這部分沒錯而不是 . . IF(temp(7)='1') THEN flag<='1'; END IF . . IF(temp(0)='1') THEN flag<='0'; END IF . .因為會差一個clock所以這部分要特別注意 vhdl只要多看多練習,不會粉難啦 不要以純程式設計觀點,去看vhdl的描述 最好還是要有一點數位邏輯的概念,這樣會比較容易理解 |
極光
初階會員 發表:32 回覆:96 積分:40 註冊:2005-01-16 發送簡訊給我 |
引言: ㊣ 大大 說的沒錯 而且的確如同大大所說的!不可以設定 IF(temp(7)='1') THEN flag<='1'; END IF 我用過模擬出來會有問題!但是我不懂耶! temp(7 downto 1)<=temp(6 downto 0); 這行是做移位的工作 但是我請教一下喔!下面的判斷式設定當TMP(6)='1'然後 flag就被設定為1 如果當TMP=01000000時,會先判斷tmp(6)是否為1 現在條件成立了,不就跳到右移那行去了嗎!這樣第7個bit不就恆為0 我卡在這裡搞不太懂耶!temp(7 downto 1)<=temp(6 downto 0); temp(0)<='0';跟你用 FOR LOOP 方式意義上是一樣的,都可以 flag是作為判斷左右移的作用,flag=0左移 flag=1右移 但是. . IF(temp(6)='1') THEN flag<='1'; END IF . . IF(temp(1)='1') THEN flag<='0'; END IF . .這部分沒錯而不是. . IF(temp(7)='1') THEN flag<='1'; END IF . . IF(temp(0)='1') THEN flag<='0'; END IF . .因為會差一個clock所以這部分要特別注意 vhdl只要多看多練習,不會粉難啦 不要以純程式設計觀點,去看vhdl的描述 最好還是要有一點數位邏輯的概念,這樣會比較容易理解 |
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
我不太會描述這種現象 但我會盡量說明清楚 左移 假設clk使temp=00100000,(此時flag的輸入=0,flag的輸出=0) 因為flag的輸出=0所以維持左移 下一個clk使temp=01000000,(此時flag的輸入=1,flag的輸出=0) 因為flag的輸出=0所以維持左移 下一個clk使temp=10000000,(此時flag的輸入=1,flag的輸出=1) 因為flag的輸出=1所以變為右移 就這樣一直循環 建議模擬時將flag.D及flag.Q拉出來看波形就會比較清楚 另外將temp由signal改成variable這樣判斷就要改成
IF(temp(7)='1') THEN lag<='1'; END IF用variable方式就不會差一個clock時間 |
極光
初階會員 發表:32 回覆:96 積分:40 註冊:2005-01-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |