pic16f684のVHDLで算術論理ユニットを作る必要があります。 したがって、ALUの命令は、pic16f684のデータシートに記載されています。vhdlで算術論理ユニットを作る
私が作る必要がある命令は次のとおりです。
をSTD_LOGIC_VECTORが文字を持つことができないというエラー、かなりロジックである、これはこれまでのところ私のコードですが、私は得ますベクトルでは、私は他の方法でそれを行う方法を知らない。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.all;
ENTITY AluPIC IS
PORT( -- Input Signals
Op_code : in std_logic_vector(6 DOWNTO 0);
win, fin : in std_logic_vector(7 DOWNTO 0);
-- Output Signals
d,z : out std_logic;
ALU_output : out std_logic_vector(7 DOWNTO 0));
END AluPIC;
ARCHITECTURE behavior OF AluPIC IS
-- declare signal(s) internal to module here
SIGNAL temp_output,wout,fout: std_logic_vector(7 DOWNTO 0);
BEGIN
PROCESS (Op_code, win, fin)
BEGIN
-- Select Arithmetic/Logical Operation
CASE Op_Code (6 DOWNTO 0) IS
WHEN "000111d" =>
if d ='0' then
wout <= win + fin;
temp_output <=wout;
else
fout <= win + fin;
temp_output <= fout;
end if;
WHEN "000101d" =>
if d ='0' then
wout <= win and fin;
temp_output <= wout;
else
fout <= win and fin;
temp_output <= fout;
end if;
WHEN "000001l" =>
fout <= fin;
fout <= "00000000";
z <= '1';
temp_output <= fout;
WHEN "001010d" =>
fout <= fin+1;
if d = '0' then
wout <= fout;
temp_output <=wout;
else
fout <= fout;
temp_output <=fout;
end if;
WHEN "001000d" =>
if d = '0' then
wout <= fin;
temp_output <= wout;
z <= '1';
else
fout <= fin;
temp_output <= fout;
z <= '1';
end if;
WHEN "0101bbb" =>
fout <= fin;
temp_output <= fout;
WHEN OTHERS =>
temp_output <= "00000000";
END CASE;
-- Select Shift Operation
IF Op_Code(0) = '1' THEN
-- Shift bits left with zero fill using concatination operator
-- can also use VHDL 1076-1993 shift operator such as SLL
Alu_output <= temp_output(6 DOWNTO 0) & '0';
ELSE
Alu_output <= temp_output;
END IF;
END PROCESS;
END behavior;
ありがとう、あなたの時間のみんな!あなたのcase
文がstd_logic_vector
を使用しますが、"000111d"
が文字列であるため、WHEN "000111d" =>
かWHEN "0101bbb" =>
などの
イェので、それははっきりしていましたが、どうやってこれを他の方法で解決できますか?命令を見ると、01bbが使用され、この命令をどのようにしてstd_logic_vectorに入れることができるのでしょうか? – Faalhaaz
'bb'や' d'の意味を理解し、適切な変更を加えるために、PICのマニュアルをもっと深く読まなければなりません。 –
ok @Faalhaaz私は質問を理解したと思う、私の編集を参照してください。 –