vhdl bcd 8bit 相加問題 |
答題得分者是:addn
|
124020024
一般會員 發表:1 回覆:4 積分:1 註冊:2007-04-18 發送簡訊給我 |
各位大大請問一下唷!? 圖片下的問題要怎麼解決@@! 我已經測試2個晚上了,問題還是沒解決希望能指點我,還好delphi.ktop有vhdl版區不然真的求助無門 我是改編4bitBCD碼加法器變成8bitBCD碼的加法器@@! 基本上程式碼的邏輯應該沒錯@@! ..........現在就卡在錯誤,而無法模擬我所寫的程式! 如果我有敘述不好的地方請多包容. 謝謝!
library ieee ; use ieee.std_logic_1164.all ; use ieee.std_logic_unsigned.all ; use ieee.std_logic_arith.all ; --******************************* entity BCD_add_1d is port ( A,B : in std_logic_vector(7 downto 0) ; S : out std_logic_vector(7 downto 0) ; Co : out std_logic ); end BCD_add_1d ; --******************************* architecture A_arith of BCD_add_1d is signal Temp : std_logic_vector(8 downto 0) ; begin process(A,B) begin Temp <= A B ; if A(3 downto 0) B(3 downto 0) >9 then Temp<=Temp "0110" ; else Temp(3 downto 0)<=A(3 downto 0) B(3 downto 0) ; end if ; if (A(7 downto 4) B(7 downto 4) >9) or (Temp(7 downto 4) >9) then Temp<=Temp "01100000" ; else Temp(7 downto 4)<=A(7 downto 4) B(7 downto 4) ; end if ; S<=Temp(7 downto 0) ; Co<=Temp(8) ; end process ; end A_arith ; http://s2.simpload.com/04204628d2aa6f668.jpg http://s2.simpload.com/04204628d2ed37e71.jpg
------
+u hi 編輯記錄
124020024 重新編輯於 2007-04-20 21:39:31, 註解 無‧
|
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
您好
1. 錯誤問題應該是出在 if A(3 downto 0) B(3 downto 0) >9 then及if (A(7 downto 4) B(7 downto 4) >9) or (Temp(7 downto 4) >9) then if裡面不能有 運算敘述,不要用寫軟體程式的觀念去寫vhdl code 2. 你的code 觀念也有錯誤,請參考下列討論 http://delphi.ktop.com.tw/board.php?cid=173&fid=1167&tid=85641 |
124020024
一般會員 發表:1 回覆:4 積分:1 註冊:2007-04-18 發送簡訊給我 |
|
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
|
124020024
一般會員 發表:1 回覆:4 積分:1 註冊:2007-04-18 發送簡訊給我 |
你好 謝謝你一直協助我解惑 真的很謝謝你唷! 我是使用max plus2 以下是書上4BIT加法器的程式碼,我給它改編8BIT加法器 我是想說他跟VB一樣有順序性@@!....所以應該很合邏輯才對阿@@ TEMP難道不能多重指定@@?
紅色那段應該就有加上4位元...4位元溢位(第5位元)也有正常加在Temp裡面.不然你可以假設一個題目....我來試著分析給你看看. By the way我有付上錯誤的圖片....他這個好像是跟檔案位址有關,應該要先想辦法先排除掉這個才能去模擬驗證我的想法對不對@@! 我也有問其他網友...他們說程式碼基本上是沒錯,可能是零件庫宣告的問題吧.... 我6種零件庫都做過各種組合了,還是一樣@@! Temp <= A B ; if A(3 downto 0) B(3 downto 0) >9 then Temp<=Temp "0110" ; else Temp(3 downto 0)<=A(3 downto 0) B(3 downto 0) ; end if ; if (A(7 downto 4) B(7 downto 4) >9) or (Temp(7 downto 4) >9) then Temp<=Temp "01100000" ; else Temp(7 downto 4)<=A(7 downto 4) B(7 downto 4) ; end if ; 課本例題: library ieee ; use ieee.std_logic_1164.all ; use ieee.std_logic_unsigned.all ; use ieee.std_logic_arith.all ; --******************************* entity BCD_add_1d is port ( A,B : in std_logic_vector(3 downto 0) ; S : out std_logic_vector(3 downto 0) ; Co : out std_logic ); end BCD_add_1d ; --******************************* architecture A_arith of BCD_add_1d is signal Temp : std_logic_vector(4 downto 0) ; begin process(A,B) begin Temp <= ('0'&A) B ; if (Temp(3 downto 0)>9) OR (Temp(4)='1') then S <= Temp(3 downto 0) 6 ; Co <= '1'; else S <= Temp(3 downto 0); Co <= '0' ; end if; end process ; end A_arith ;
------
+u hi |
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
您好
1. 你課本例題並沒有在if裡面用 運算敘述 你可以試試將 算敘述拿掉改成 if A(3 downto 0) >9 then if (A(7 downto 4) >9) or (Temp(7 downto 4) >9) then 這樣compile就不會出現錯誤訊息了,這可以證明if裡面不能用 運算敘述 試試看吧 2. 等你上面問題解決了,緊接著你就會發現我所說的狀況 3. 看你的CODE就知道你用一般程式設計觀念在寫VHDL CODE 多重指定值部分,記得你是在寫VHDL不是一般程式變數高興怎麼給指定值都可以 而要符合數位設計觀念,VHDL是硬體描述語言不是硬體設計語言,設計者要用VHDL提供的 語法來描述出想要設計的電路,
編輯記錄
addn 重新編輯於 2007-04-21 21:40:03, 註解 無‧
|
124020024
一般會員 發表:1 回覆:4 積分:1 註冊:2007-04-18 發送簡訊給我 |
|
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
|
124020024
一般會員 發表:1 回覆:4 積分:1 註冊:2007-04-18 發送簡訊給我 |
===================引 用 addn 文 章=================== 您好 解決方法第4篇文章有提到 關於差異只要多學,多看,多練習,多思考等學到一定程度自然會有所體會 --------------------------------------------------------------------------------------------- 多重指定問題我就把TEMP分成TEMP1 TEMP2 TEMP3.....那應該就沒有問題了 先TRY哩!
------
+u hi |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |