線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2426
推到 Plurk!
推到 Facebook!

vhdl bcd 8bit 相加問題

答題得分者是:addn
124020024
一般會員


發表:1
回覆:4
積分:1
註冊:2007-04-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-20 21:36:39 IP:220.141.xxx.xxx 訂閱
各位大大請問一下唷!? 圖片下的問題要怎麼解決@@! 我已經測試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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-21 00:07:46 IP:218.171.xxx.xxx 訂閱
您好
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-21 00:18:55 IP:220.141.xxx.xxx 訂閱
謝謝你唷,對於你所指出的錯誤觀念能更詳盡的解說嗎?  我是參照著入門書寫的....書上的確有在IF 涵式裡面+號........如果不能使用加號 那該用什麼敘述方法呢?
CODE 觀念錯誤~"~ 可是我自己經用這個程式用計算紙RUN 同學也都提出問題我依依使用我寫的敘述來回答了@@! 聽妳這麼說....我的觀念似乎真的都錯哩!

------
+u hi
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-21 09:21:45 IP:218.171.xxx.xxx 訂閱
您好
1.
我使用的軟體是max plus2不支援上述用法,不曉得你用的是??
你說入門書有寫這樣的用法,可以把書上列子打上來看看嗎
解決方法加上幾個變數分別指定a b低位元及a b 進位高位元
然後if裡面用變數做判斷
2.
觀念有問題你的code根本沒考慮低四位元進位
temp多重指定值問題


124020024
一般會員


發表:1
回覆:4
積分:1
註冊:2007-04-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-21 17:20:28 IP:218.162.xxx.xxx 訂閱
你好 謝謝你一直協助我解惑 真的很謝謝你唷!  我是使用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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-21 21:22:38 IP:218.171.xxx.xxx 訂閱
您好
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-04-21 23:00:58 IP:218.162.xxx.xxx 訂閱
你好阿!
真的在if裡面把 號弄掉.....編譯就成功了. 但是入門書...怎都沒提到這點@@! 多重指定@@! 在vhdl設計是跟一般寫軟體程式不一樣阿@@!
如何把硬體描述語言的軟體程式設計的差別區分開來,我一直認為寫法都大同小異.....就連teacher也沒提過= =|||
那在if裡面如何能把2樣東西給合起來呢?這些vhdl語法限制去google應該有吧@@! 那我這個程式不就要再重新構想了
------
+u hi
addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-04-22 09:18:37 IP:218.171.xxx.xxx 訂閱
您好
解決方法第4篇文章有提到
關於差異只要多學,多看,多練習,多思考等學到一定程度自然會有所體會
編輯記錄
addn 重新編輯於 2007-04-22 09:20:26, 註解 無‧
124020024
一般會員


發表:1
回覆:4
積分:1
註冊:2007-04-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-04-22 10:24:32 IP:218.162.xxx.xxx 訂閱

===================引 用 addn 文 章===================
您好
解決方法第4篇文章有提到
關於差異只要多學,多看,多練習,多思考等學到一定程度自然會有所體會
---------------------------------------------------------------------------------------------
多重指定問題我就把TEMP分成TEMP1 TEMP2 TEMP3.....那應該就沒有問題了 先TRY哩!
------
+u hi
系統時間:2024-05-20 4:31:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!