我正在嘗試在VHDL中創建一個組件,下面是我的代碼。我不知道我哪裏錯了。我的邏輯是: •每隔一步 •將除數右移,並將其與當前的除數比較 •如果除數較大,則將0作爲商的下一位移位•如果除數較小,則減去以獲得新的除數和移位1 作爲商的下一位。在VHDL中使用組件和forloop問題
我在這裏使用' - '符號,但實際上我必須使用門,所以要麼我必須使用我的減法組件或只是在這裏創建一個減法器。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY divprog IS
PORT(
a: IN std_logic_vector(3 downto 0);
b: IN std_logic_vector(3 downto 0);
err: OUT std_logic;
reslow: OUT std_logic_vector(3 downto 0);
reshigh: OUT std_logic_vector(3 downto 0));
END divprog;
architecture behaviour of divprog is
signal ax,bx,bsub,res :std_logic_vector(7 downto 0) := (others => '0');
signal quo: std_logic_vector(3 downto 0) := (others => '0');
signal intcarry: std_logic_vector(8 downto 0):= (others => '0');
BEGIN
--sub1: subtractor PORT MAP(aa,bb,x,ss);
Process is
variable i : POSITIVE := 1;
BEGIN
ax <= "0000" & a;
bx <= b & "0000";
if(b > "0000") then
while (i <=3) loop
bx <= '0'&bx(7 downto 1);
IF (ax < bx) then
quo <= quo(2 downto 0)& '0';
--bx <= '0'&bx(7 downto 1);
res <=ax;
elsif(ax >= bx) then
res <= ax - bx;
quo <=quo(2 downto 0)& '1';
end if;
i := i + 1;
ax <= res;
end loop;
reshigh <= quo;
reslow <= res(3 downto 0);
end IF;
wait for 100 ns;
END PROCESS;
end behaviour;
可以請別人幫我這個嗎? 謝謝
在代碼中,您只需執行很多操作,然後等待100ns。你如何檢查你的代碼?你的測試平臺在哪裏?要進行調試,您應該一次執行一個步驟。嘗試一個操作,看看它是否符合你的期望。然後嘗試第二次操作:再次檢查。等等...... – JHBonarius
一些建議:1)告訴我們你收到了什麼錯誤信息。 2)最好使用ieee.numeric_std包(而不是std_logic_arith和std_logic_unsigned),它提供簽名和未簽名的數據類型。 3)我猜你的代碼很難合成。它是否用於合成?或者只是模擬?對於綜合來說,你可能想創建一個更流水線的設計。 – Juergen
我的代碼符合,但我得到輸出爲'0'。我只是爲了模擬而實現這個代碼。當我開始運行中斷代碼時,我將值分配給ax和bx,它顯示爲零。我改變了邏輯,因爲它對我來說太複雜了,我只知道基本的VHDL。 –