mirror of
https://github.com/Lemonochrme/vhdl_processor.git
synced 2025-06-08 17:00:50 +02:00
MULTIPLICATION Done.
This commit is contained in:
parent
f65b4dfcd0
commit
d422136f63
3 changed files with 15 additions and 8 deletions
|
@ -60,7 +60,7 @@
|
||||||
<Option Name="EnableBDX" Val="FALSE"/>
|
<Option Name="EnableBDX" Val="FALSE"/>
|
||||||
<Option Name="DSABoardId" Val="basys3"/>
|
<Option Name="DSABoardId" Val="basys3"/>
|
||||||
<Option Name="FeatureSet" Val="FeatureSet_Classic"/>
|
<Option Name="FeatureSet" Val="FeatureSet_Classic"/>
|
||||||
<Option Name="WTXSimLaunchSim" Val="875"/>
|
<Option Name="WTXSimLaunchSim" Val="880"/>
|
||||||
<Option Name="WTModelSimLaunchSim" Val="0"/>
|
<Option Name="WTModelSimLaunchSim" Val="0"/>
|
||||||
<Option Name="WTQuestaLaunchSim" Val="0"/>
|
<Option Name="WTQuestaLaunchSim" Val="0"/>
|
||||||
<Option Name="WTIesLaunchSim" Val="0"/>
|
<Option Name="WTIesLaunchSim" Val="0"/>
|
||||||
|
|
14
src/cpu.vhd
14
src/cpu.vhd
|
@ -147,7 +147,7 @@ BEGIN
|
||||||
A_DI_EX <= A_LI_DI;
|
A_DI_EX <= A_LI_DI;
|
||||||
C_DI_EX <= C_LI_DI;
|
C_DI_EX <= C_LI_DI;
|
||||||
R_ADDRESS_A_HANDLE <= B_LI_DI(3 downto 0);
|
R_ADDRESS_A_HANDLE <= B_LI_DI(3 downto 0);
|
||||||
elsif OP_LI_DI = X"01" then -- ADD
|
elsif OP_LI_DI = X"01" or OP_LI_DI = X"02" then -- ADD
|
||||||
OP_DI_EX <= OP_LI_DI;
|
OP_DI_EX <= OP_LI_DI;
|
||||||
A_DI_EX <= A_LI_DI;
|
A_DI_EX <= A_LI_DI;
|
||||||
R_ADDRESS_B_HANDLE <= C_LI_DI(3 downto 0);
|
R_ADDRESS_B_HANDLE <= C_LI_DI(3 downto 0);
|
||||||
|
@ -172,13 +172,17 @@ BEGIN
|
||||||
OP_EX_MEM <= OP_DI_EX;
|
OP_EX_MEM <= OP_DI_EX;
|
||||||
A_EX_MEM <= A_DI_EX;
|
A_EX_MEM <= A_DI_EX;
|
||||||
B_EX_MEM <= A_DATA_OUT_HANDLE; -- Pour éviter décallage temporel on passe directement A_DATA_OUT_HANDLE au lieu de B_DI_EX
|
B_EX_MEM <= A_DATA_OUT_HANDLE; -- Pour éviter décallage temporel on passe directement A_DATA_OUT_HANDLE au lieu de B_DI_EX
|
||||||
elsif OP_DI_EX = X"01" then
|
elsif OP_DI_EX = X"01" or OP_DI_EX = X"02" then
|
||||||
-- ALU
|
-- ALU
|
||||||
OP_EX_MEM <= OP_DI_EX;
|
OP_EX_MEM <= OP_DI_EX;
|
||||||
A_EX_MEM <= A_DI_EX;
|
A_EX_MEM <= A_DI_EX;
|
||||||
ALU_A_OPERAND <= A_DATA_OUT_HANDLE;
|
ALU_A_OPERAND <= A_DATA_OUT_HANDLE;
|
||||||
ALU_B_OPERAND <= B_DATA_OUT_HANDLE;
|
ALU_B_OPERAND <= B_DATA_OUT_HANDLE;
|
||||||
|
if OP_DI_EX = X"01" then
|
||||||
ALU_OP_TYPE <= "000"; -- ADD
|
ALU_OP_TYPE <= "000"; -- ADD
|
||||||
|
elsif OP_DI_EX = X"02" then
|
||||||
|
ALU_OP_TYPE <= "110"; -- Multiplication
|
||||||
|
end if;
|
||||||
else
|
else
|
||||||
OP_EX_MEM <= X"00";
|
OP_EX_MEM <= X"00";
|
||||||
A_EX_MEM <= X"00";
|
A_EX_MEM <= X"00";
|
||||||
|
@ -195,7 +199,7 @@ BEGIN
|
||||||
OP_MEM_RE <= OP_EX_MEM;
|
OP_MEM_RE <= OP_EX_MEM;
|
||||||
A_MEM_RE <= A_EX_MEM;
|
A_MEM_RE <= A_EX_MEM;
|
||||||
B_MEM_RE <= B_EX_MEM;
|
B_MEM_RE <= B_EX_MEM;
|
||||||
elsif OP_EX_MEM = X"01" then
|
elsif OP_EX_MEM = X"01" or OP_EX_MEM = X"02" then
|
||||||
OP_MEM_RE <= OP_EX_MEM;
|
OP_MEM_RE <= OP_EX_MEM;
|
||||||
A_MEM_RE <= A_EX_MEM;
|
A_MEM_RE <= A_EX_MEM;
|
||||||
B_MEM_RE <= ALU_DATA_OUT;
|
B_MEM_RE <= ALU_DATA_OUT;
|
||||||
|
@ -212,7 +216,7 @@ BEGIN
|
||||||
begin
|
begin
|
||||||
if rising_edge(clk) then
|
if rising_edge(clk) then
|
||||||
-- Ecrire dans les registres
|
-- Ecrire dans les registres
|
||||||
if OP_MEM_RE = X"06" or OP_MEM_RE = X"05" or OP_MEM_RE = X"01" then
|
if OP_MEM_RE = X"06" or OP_MEM_RE = X"05" or OP_MEM_RE = X"01" or OP_MEM_RE = X"02" then
|
||||||
W_ADDRESS_HANDLE <= A_MEM_RE(3 downto 0);
|
W_ADDRESS_HANDLE <= A_MEM_RE(3 downto 0);
|
||||||
W_DATA_HANDLE <= B_MEM_RE;
|
W_DATA_HANDLE <= B_MEM_RE;
|
||||||
else
|
else
|
||||||
|
@ -226,7 +230,7 @@ BEGIN
|
||||||
process(clk)
|
process(clk)
|
||||||
begin
|
begin
|
||||||
if rising_edge(clk) then
|
if rising_edge(clk) then
|
||||||
if OP_MEM_RE = X"06" or OP_MEM_RE = X"05" or OP_MEM_RE = X"01" then
|
if OP_MEM_RE = X"06" or OP_MEM_RE = X"05" or OP_MEM_RE = X"01" or OP_MEM_RE = X"02" then
|
||||||
W_ENABLE_HANDLE <= '1';
|
W_ENABLE_HANDLE <= '1';
|
||||||
else
|
else
|
||||||
W_ENABLE_HANDLE <= '0';
|
W_ENABLE_HANDLE <= '0';
|
||||||
|
|
|
@ -43,6 +43,9 @@ entity instruction is
|
||||||
init_result(15) := X"01020404"; -- ADD 2 + 2
|
init_result(15) := X"01020404"; -- ADD 2 + 2
|
||||||
init_result(16) := X"01020405"; -- ADD 2 + 3
|
init_result(16) := X"01020405"; -- ADD 2 + 3
|
||||||
init_result(17) := X"01020505"; -- ADD 3 + 3
|
init_result(17) := X"01020505"; -- ADD 3 + 3
|
||||||
|
-- Multiplication
|
||||||
|
init_result(18) := X"02020505"; -- MULTIPLICATION 3 * 3
|
||||||
|
|
||||||
|
|
||||||
return init_result;
|
return init_result;
|
||||||
end function init;
|
end function init;
|
||||||
|
|
Loading…
Add table
Reference in a new issue