Initial commit
This commit is contained in:
18
Libs/RiscV/HEIRV32/MultiCycle/hdl/instrDecoder_rtl.vhd
Normal file
18
Libs/RiscV/HEIRV32/MultiCycle/hdl/instrDecoder_rtl.vhd
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
ARCHITECTURE rtl OF instrDecoder IS
|
||||
BEGIN
|
||||
|
||||
decode : process(op)
|
||||
begin
|
||||
case op is
|
||||
when "0000011" => immSrc <= "00"; -- lw
|
||||
when "0100011" => immSrc <= "01"; -- sw
|
||||
when "0110011" => immSrc <= "--"; -- R-type
|
||||
when "1100011" => immSrc <= "10"; -- beq
|
||||
when "0010011" => immSrc <= "00"; -- l-type ALU
|
||||
when "1101111" => immSrc <= "11"; -- jal
|
||||
when others => immSrc <= "--"; -- unknwon
|
||||
end case;
|
||||
end process decode;
|
||||
|
||||
END ARCHITECTURE rtl;
|
@ -0,0 +1,26 @@
|
||||
|
||||
ARCHITECTURE rtl OF instructionForwarder IS
|
||||
signal lvec_irMem : std_ulogic_vector(readData'range);
|
||||
BEGIN
|
||||
|
||||
-- forwardIR : process(rst, clk)
|
||||
-- begin
|
||||
-- if rst = '1' then
|
||||
-- lvec_irMem <= (others => '0');
|
||||
-- elsif rising_edge(clk) then
|
||||
-- if en = '1' and IRWrite = '1' then
|
||||
-- lvec_irMem <= readData;
|
||||
-- end if;
|
||||
-- end if;
|
||||
-- end process forwardIR;
|
||||
|
||||
forwardIR : process(readData, irWrite)
|
||||
begin
|
||||
if irWrite = '1' then
|
||||
lvec_irMem <= readData;
|
||||
end if;
|
||||
end process forwardIR;
|
||||
|
||||
instruction <= lvec_irMem;
|
||||
|
||||
END ARCHITECTURE rtl;
|
@ -0,0 +1 @@
|
||||
DIALECT atom VHDL_2008
|
@ -0,0 +1 @@
|
||||
DIALECT atom VHDL_2008
|
@ -0,0 +1 @@
|
||||
DIALECT atom VHDL_2008
|
@ -0,0 +1 @@
|
||||
DIALECT atom VHDL_2008
|
2
Libs/RiscV/HEIRV32/MultiCycle/hds/_controlunit._epf
Normal file
2
Libs/RiscV/HEIRV32/MultiCycle/hds/_controlunit._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom struct
|
||||
DEFAULT_FILE atom control@unit/struct.bd
|
3
Libs/RiscV/HEIRV32/MultiCycle/hds/_heirv32_mc._epf
Normal file
3
Libs/RiscV/HEIRV32/MultiCycle/hds/_heirv32_mc._epf
Normal file
@ -0,0 +1,3 @@
|
||||
TOP_MARKER atom 1
|
||||
DEFAULT_FILE atom heirv32_mc/struct.bd
|
||||
DEFAULT_ARCHITECTURE atom struct
|
2
Libs/RiscV/HEIRV32/MultiCycle/hds/_instrdecoder._epf
Normal file
2
Libs/RiscV/HEIRV32/MultiCycle/hds/_instrdecoder._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom instrDecoder_rtl.vhd
|
@ -0,0 +1,2 @@
|
||||
DEFAULT_FILE atom instruction@data@memory/struct.bd
|
||||
DEFAULT_ARCHITECTURE atom struct
|
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom instructionForwarder_rtl.vhd
|
2
Libs/RiscV/HEIRV32/MultiCycle/hds/_mainfsm._epf
Normal file
2
Libs/RiscV/HEIRV32/MultiCycle/hds/_mainfsm._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom fsm
|
||||
DEFAULT_FILE atom main@f@s@m/fsm.sm
|
6095
Libs/RiscV/HEIRV32/MultiCycle/hds/control@unit/struct.bd
Normal file
6095
Libs/RiscV/HEIRV32/MultiCycle/hds/control@unit/struct.bd
Normal file
File diff suppressed because it is too large
Load Diff
2439
Libs/RiscV/HEIRV32/MultiCycle/hds/control@unit/symbol.sb
Normal file
2439
Libs/RiscV/HEIRV32/MultiCycle/hds/control@unit/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
13169
Libs/RiscV/HEIRV32/MultiCycle/hds/heirv32_mc/struct.bd
Normal file
13169
Libs/RiscV/HEIRV32/MultiCycle/hds/heirv32_mc/struct.bd
Normal file
File diff suppressed because it is too large
Load Diff
1718
Libs/RiscV/HEIRV32/MultiCycle/hds/heirv32_mc/symbol.sb
Normal file
1718
Libs/RiscV/HEIRV32/MultiCycle/hds/heirv32_mc/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1395
Libs/RiscV/HEIRV32/MultiCycle/hds/instr@decoder/symbol.sb
Normal file
1395
Libs/RiscV/HEIRV32/MultiCycle/hds/instr@decoder/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
3458
Libs/RiscV/HEIRV32/MultiCycle/hds/instruction@data@memory/struct.bd
Normal file
3458
Libs/RiscV/HEIRV32/MultiCycle/hds/instruction@data@memory/struct.bd
Normal file
File diff suppressed because it is too large
Load Diff
1756
Libs/RiscV/HEIRV32/MultiCycle/hds/instruction@data@memory/symbol.sb
Normal file
1756
Libs/RiscV/HEIRV32/MultiCycle/hds/instruction@data@memory/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1488
Libs/RiscV/HEIRV32/MultiCycle/hds/instruction@forwarder/symbol.sb
Normal file
1488
Libs/RiscV/HEIRV32/MultiCycle/hds/instruction@forwarder/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
6751
Libs/RiscV/HEIRV32/MultiCycle/hds/main@f@s@m/fsm.sm
Normal file
6751
Libs/RiscV/HEIRV32/MultiCycle/hds/main@f@s@m/fsm.sm
Normal file
File diff suppressed because it is too large
Load Diff
2194
Libs/RiscV/HEIRV32/MultiCycle/hds/main@f@s@m/symbol.sb
Normal file
2194
Libs/RiscV/HEIRV32/MultiCycle/hds/main@f@s@m/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
32
Libs/RiscV/HEIRV32/SingleCycle/hdl/dataMemory_rtl.vhd
Normal file
32
Libs/RiscV/HEIRV32/SingleCycle/hdl/dataMemory_rtl.vhd
Normal file
@ -0,0 +1,32 @@
|
||||
|
||||
ARCHITECTURE rtl OF dataMemory IS
|
||||
|
||||
-- Bank of data
|
||||
type t_dataBank is array (0 to (2**g_memoryNbBits)-1) of
|
||||
std_ulogic_vector(g_dataWidth-1 downto 0);
|
||||
-- A bank of data
|
||||
signal larr_data: t_dataBank;
|
||||
|
||||
BEGIN
|
||||
|
||||
process(rst, clk)
|
||||
begin
|
||||
if rst = '1' then
|
||||
larr_data <= (others => (others => '0')) after g_tMemWr;
|
||||
elsif rising_edge(clk) then
|
||||
if en = '1' and writeEn = '1' then
|
||||
-- skip the two last bits (since we do only +4)
|
||||
larr_data(to_integer(unsigned(
|
||||
address(g_memoryNbBits+1 downto 2)
|
||||
))) <= writeData after (g_tMemWr + g_tSetup);
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-- Comb. read
|
||||
-- skip the two last bits (since we do only +4)
|
||||
readData <= larr_data(to_integer(unsigned(
|
||||
address(g_memoryNbBits+1 downto 2)
|
||||
))) after g_tMemRd;
|
||||
|
||||
END ARCHITECTURE rtl;
|
34
Libs/RiscV/HEIRV32/SingleCycle/hdl/instrMemory_bin.vhd
Normal file
34
Libs/RiscV/HEIRV32/SingleCycle/hdl/instrMemory_bin.vhd
Normal file
@ -0,0 +1,34 @@
|
||||
USE std.textio.all;
|
||||
|
||||
ARCHITECTURE bin OF instrMemory IS
|
||||
|
||||
-- Instructions type
|
||||
type t_instrBank is array (g_memoryNbBits-1 downto 0) of
|
||||
std_ulogic_vector(g_dataWidth-1 downto 0);
|
||||
|
||||
-- Define function to create initvalue signal
|
||||
impure function ReadRamContentFromFile(ramContentFilenAme : in string) return t_instrBank is
|
||||
FILE ramContentFile : text is in ramContentFilenAme;
|
||||
variable ramContentFileLine : line;
|
||||
variable ramContent : t_instrBank;
|
||||
begin
|
||||
for i in t_instrBank'range loop
|
||||
readline(ramContentFile, ramContentFileLine);
|
||||
read(ramContentFileLine, ramContent(i));
|
||||
end loop;
|
||||
return ramContent;
|
||||
end function;
|
||||
|
||||
-- Program
|
||||
constant larr_instr : t_instrBank := ReadRamContentFromFile(g_programFile);
|
||||
|
||||
BEGIN
|
||||
|
||||
-- Comb. read
|
||||
process(PC)
|
||||
begin
|
||||
-- skip the two last bits (since we do only +4)
|
||||
instruction <= larr_instr(to_integer(PC(g_memoryNbBits+1 downto 2)));
|
||||
end process;
|
||||
|
||||
END ARCHITECTURE bin;
|
36
Libs/RiscV/HEIRV32/SingleCycle/hdl/instrMemory_hex.vhd
Normal file
36
Libs/RiscV/HEIRV32/SingleCycle/hdl/instrMemory_hex.vhd
Normal file
@ -0,0 +1,36 @@
|
||||
library ieee;
|
||||
use std.textio.all;
|
||||
use ieee.std_logic_textio.all;
|
||||
|
||||
ARCHITECTURE hex OF instrMemory IS
|
||||
|
||||
-- Instructions type
|
||||
type t_instrBank is array (0 to (2**g_memoryNbBits)-1) of
|
||||
std_ulogic_vector(g_dataWidth-1 downto 0);
|
||||
|
||||
-- Define function to create initvalue signal
|
||||
impure function ReadRamContentFromFile(ramContentFilenAme : in string) return t_instrBank is
|
||||
FILE ramContentFile : text is in ramContentFilenAme;
|
||||
variable ramContentFileLine : line;
|
||||
variable ramContent : t_instrBank;
|
||||
begin
|
||||
for i in t_instrBank'range loop
|
||||
readline(ramContentFile, ramContentFileLine);
|
||||
HREAD(ramContentFileLine, ramContent(i));
|
||||
end loop;
|
||||
return ramContent;
|
||||
end function;
|
||||
|
||||
-- Program
|
||||
constant larr_instr : t_instrBank := ReadRamContentFromFile(g_programFile);
|
||||
|
||||
BEGIN
|
||||
|
||||
-- Comb. read
|
||||
process(PC)
|
||||
begin
|
||||
-- skip the two last bits (since we do only +4)
|
||||
instruction <= larr_instr(to_integer(PC(g_memoryNbBits+1 downto 2))) after g_tMemRd;
|
||||
end process;
|
||||
|
||||
END ARCHITECTURE hex;
|
24
Libs/RiscV/HEIRV32/SingleCycle/hdl/mainDecoder_rtl.vhd
Normal file
24
Libs/RiscV/HEIRV32/SingleCycle/hdl/mainDecoder_rtl.vhd
Normal file
@ -0,0 +1,24 @@
|
||||
|
||||
ARCHITECTURE rtl OF mainDecoder IS
|
||||
|
||||
signal lvec_controls : std_ulogic_vector(10 downto 0);
|
||||
|
||||
BEGIN
|
||||
|
||||
process(op)
|
||||
begin
|
||||
case op is
|
||||
when "0000011" => lvec_controls <= "10010010000"; -- lw
|
||||
when "0100011" => lvec_controls <= "00111000000"; -- sw
|
||||
when "0110011" => lvec_controls <= "1--00000100"; -- R-type
|
||||
when "1100011" => lvec_controls <= "01000001010"; -- beq
|
||||
when "0010011" => lvec_controls <= "10010000100"; -- I-type ALU
|
||||
when "1101111" => lvec_controls <= "11100100001"; -- jal
|
||||
when others => lvec_controls <= "-----------"; -- not valid
|
||||
end case;
|
||||
end process;
|
||||
|
||||
(regwrite, immSrc(1), immSrc(0), ALUSrc, memWrite, resultSrc(1), resultSrc(0),
|
||||
branch, ALUOp(1), ALUOp(0), jump) <= lvec_controls after g_tDec;
|
||||
|
||||
END ARCHITECTURE rtl;
|
@ -0,0 +1 @@
|
||||
DIALECT atom VHDL_2008
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_bin._epf
Normal file
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_bin._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_FILE atom rtl_instrMemory.vhd
|
||||
DEFAULT_ARCHITECTURE atom instrMemory
|
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_controlunit._epf
Normal file
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_controlunit._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom masterVersion
|
||||
DEFAULT_FILE atom control@unit/master@version.bd
|
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_datamemory._epf
Normal file
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_datamemory._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom dataMemory_rtl.vhd
|
3
Libs/RiscV/HEIRV32/SingleCycle/hds/_heirv32_sc._epf
Normal file
3
Libs/RiscV/HEIRV32/SingleCycle/hds/_heirv32_sc._epf
Normal file
@ -0,0 +1,3 @@
|
||||
TOP_MARKER atom 1
|
||||
DEFAULT_FILE atom heirv32_sc/struct.bd
|
||||
DEFAULT_ARCHITECTURE atom struct
|
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_instrmemory._epf
Normal file
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_instrmemory._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom hex
|
||||
DEFAULT_FILE atom instrMemory_hex.vhd
|
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_maindecoder._epf
Normal file
2
Libs/RiscV/HEIRV32/SingleCycle/hds/_maindecoder._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom mainDecoder_rtl.vhd
|
1329
Libs/RiscV/HEIRV32/SingleCycle/hds/bin/interface
Normal file
1329
Libs/RiscV/HEIRV32/SingleCycle/hds/bin/interface
Normal file
File diff suppressed because it is too large
Load Diff
4969
Libs/RiscV/HEIRV32/SingleCycle/hds/control@unit/master@version.bd
Normal file
4969
Libs/RiscV/HEIRV32/SingleCycle/hds/control@unit/master@version.bd
Normal file
File diff suppressed because it is too large
Load Diff
3368
Libs/RiscV/HEIRV32/SingleCycle/hds/control@unit/students@version.bd
Normal file
3368
Libs/RiscV/HEIRV32/SingleCycle/hds/control@unit/students@version.bd
Normal file
File diff suppressed because it is too large
Load Diff
2014
Libs/RiscV/HEIRV32/SingleCycle/hds/control@unit/symbol.sb
Normal file
2014
Libs/RiscV/HEIRV32/SingleCycle/hds/control@unit/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1860
Libs/RiscV/HEIRV32/SingleCycle/hds/data@memory/symbol.sb
Normal file
1860
Libs/RiscV/HEIRV32/SingleCycle/hds/data@memory/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
12244
Libs/RiscV/HEIRV32/SingleCycle/hds/heirv32_sc/struct.bd
Normal file
12244
Libs/RiscV/HEIRV32/SingleCycle/hds/heirv32_sc/struct.bd
Normal file
File diff suppressed because it is too large
Load Diff
1732
Libs/RiscV/HEIRV32/SingleCycle/hds/heirv32_sc/symbol.sb
Normal file
1732
Libs/RiscV/HEIRV32/SingleCycle/hds/heirv32_sc/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1481
Libs/RiscV/HEIRV32/SingleCycle/hds/instr@memory/symbol.sb
Normal file
1481
Libs/RiscV/HEIRV32/SingleCycle/hds/instr@memory/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1882
Libs/RiscV/HEIRV32/SingleCycle/hds/main@decoder/symbol.sb
Normal file
1882
Libs/RiscV/HEIRV32/SingleCycle/hds/main@decoder/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
40
Libs/RiscV/HEIRV32/hdl/ALU_rtl.vhd
Normal file
40
Libs/RiscV/HEIRV32/hdl/ALU_rtl.vhd
Normal file
@ -0,0 +1,40 @@
|
||||
-- Risc-V ed. 2022 page 250 (pdf page 273)
|
||||
|
||||
ARCHITECTURE rtl OF ALU IS
|
||||
|
||||
signal lvec_res : std_ulogic_vector(res'range);
|
||||
signal lsig_zero : std_ulogic;
|
||||
|
||||
BEGIN
|
||||
|
||||
lsig_zero <= '1' when lvec_res = (lvec_res'range => '0') else '0';
|
||||
zero <= lsig_zero after g_tALU;
|
||||
res <= lvec_res after g_tALU;
|
||||
|
||||
alu : process(srcA, srcB, ctrl)
|
||||
begin
|
||||
case ctrl is
|
||||
when "000" => -- add
|
||||
lvec_res <= std_ulogic_vector(resize(
|
||||
unsigned(srcA) + unsigned(srcB), lvec_res'length
|
||||
));
|
||||
when "001" => -- substract
|
||||
lvec_res <= std_ulogic_vector(resize(
|
||||
unsigned(srcA) - unsigned(srcB), lvec_res'length
|
||||
));
|
||||
when "010" => -- AND
|
||||
lvec_res <= srcA and srcB;
|
||||
when "011" => -- OR
|
||||
lvec_res <= srcA or srcB;
|
||||
when "101" => -- SLT
|
||||
if srcA < srcB then
|
||||
lvec_res <= (lvec_res'high downto 1 => '0') & '1';
|
||||
else
|
||||
lvec_res <= (lvec_res'high downto 1 => '0') & '0';
|
||||
end if;
|
||||
when others => -- unknown
|
||||
lvec_res <= (others => '-');
|
||||
end case;
|
||||
end process alu;
|
||||
|
||||
END ARCHITECTURE rtl;
|
27
Libs/RiscV/HEIRV32/hdl/aluDecoder_rtl.vhd
Normal file
27
Libs/RiscV/HEIRV32/hdl/aluDecoder_rtl.vhd
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
ARCHITECTURE rtl OF aluDecoder IS
|
||||
signal lsig_rTypeSub : std_ulogic;
|
||||
BEGIN
|
||||
lsig_rTypeSub <= funct7 and op; -- true for R-type substract
|
||||
|
||||
decode : process(op, funct3, funct7, ALUOp, lsig_rTypeSub)
|
||||
begin
|
||||
case ALUOp is
|
||||
when "00" => ALUControl <= "000" after g_tDec; -- addition
|
||||
when "01" => ALUControl <= "001" after g_tDec; -- substraction
|
||||
when others =>
|
||||
case funct3 is -- R-type or I-type
|
||||
when "000" =>
|
||||
if lsig_rTypeSub = '1' then
|
||||
ALUControl <= "001" after g_tDec; -- sub
|
||||
else
|
||||
ALUControl <= "000" after g_tDec; -- add, addi
|
||||
end if;
|
||||
when "010" => ALUControl <= "101" after g_tDec; -- slt, slti
|
||||
when "110" => ALUControl <= "011" after g_tDec; -- or, ori
|
||||
when "111" => ALUControl <= "010" after g_tDec; -- and, andi
|
||||
when others => ALUControl <= "---" after g_tDec; -- unknown
|
||||
end case;
|
||||
end case;
|
||||
end process decode;
|
||||
END ARCHITECTURE rtl;
|
6
Libs/RiscV/HEIRV32/hdl/bramAddrReducer_rtl.vhd
Normal file
6
Libs/RiscV/HEIRV32/hdl/bramAddrReducer_rtl.vhd
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
ARCHITECTURE rtl OF bramAddrReducer IS
|
||||
BEGIN
|
||||
-- +2 to srr(2) the address (as it makes +4)
|
||||
addrOut <= std_ulogic_vector(addrIn(addrOut'high+2 downto addrOut'low+2));
|
||||
END ARCHITECTURE rtl;
|
17
Libs/RiscV/HEIRV32/hdl/bufferStdULogEnable_rtl.vhd
Normal file
17
Libs/RiscV/HEIRV32/hdl/bufferStdULogEnable_rtl.vhd
Normal file
@ -0,0 +1,17 @@
|
||||
|
||||
ARCHITECTURE rtl OF bufferStdULogEnable IS
|
||||
BEGIN
|
||||
|
||||
buffering:process(rst, CLK)
|
||||
begin
|
||||
if rst = '1' then
|
||||
out1 <= (others=>'0');
|
||||
elsif rising_edge(CLK) then
|
||||
if EN = '1' then
|
||||
out1 <= in1;
|
||||
end if;
|
||||
end if;
|
||||
end process buffering;
|
||||
|
||||
END ARCHITECTURE rtl;
|
||||
|
16
Libs/RiscV/HEIRV32/hdl/bufferUnsignedEnable_rtl.vhd
Normal file
16
Libs/RiscV/HEIRV32/hdl/bufferUnsignedEnable_rtl.vhd
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
ARCHITECTURE rtl OF bufferUnsignedEnable IS
|
||||
BEGIN
|
||||
|
||||
buffering:process(rst, CLK)
|
||||
begin
|
||||
if rst = '1' then
|
||||
out1 <= (others=>'0') after g_tPC;
|
||||
elsif rising_edge(CLK) then
|
||||
if EN = '1' then
|
||||
out1 <= in1 after g_tPC;
|
||||
end if;
|
||||
end if;
|
||||
end process buffering;
|
||||
|
||||
END ARCHITECTURE rtl;
|
26
Libs/RiscV/HEIRV32/hdl/extend_rtl.vhd
Normal file
26
Libs/RiscV/HEIRV32/hdl/extend_rtl.vhd
Normal file
@ -0,0 +1,26 @@
|
||||
|
||||
ARCHITECTURE rtl OF extend IS
|
||||
BEGIN
|
||||
|
||||
extend : process(input, src)
|
||||
begin
|
||||
case src is
|
||||
when "00" => -- I-type
|
||||
extended <= (12 to 31 => input(31)) &
|
||||
input(31 downto 20) after g_tExt;
|
||||
when "01" => -- S-types (stores)
|
||||
extended <= (12 to 31 => input(31)) &
|
||||
input(31 downto 25) & input(11 downto 7) after g_tExt;
|
||||
when "10" => -- B-type (branches)
|
||||
extended <= (12 to 31 => input(31)) & input(7) &
|
||||
input(30 downto 25) & input(11 downto 8) & '0' after g_tExt;
|
||||
when "11" => -- J-type (jal)
|
||||
extended <= (20 to 31 => input(31)) &
|
||||
input(19 downto 12) & input(20) &
|
||||
input(30 downto 21) & '0' after g_tExt;
|
||||
when others => -- impossible
|
||||
extended <= (others => '-') after g_tExt;
|
||||
end case;
|
||||
end process extend;
|
||||
|
||||
END ARCHITECTURE rtl;
|
16
Libs/RiscV/HEIRV32/hdl/mux4To1ULogVec_rtl.vhd
Normal file
16
Libs/RiscV/HEIRV32/hdl/mux4To1ULogVec_rtl.vhd
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
ARCHITECTURE rtl OF mux4To1ULogVec IS
|
||||
BEGIN
|
||||
|
||||
muxSelect: process(sel, in1, in2, in3, in4)
|
||||
begin
|
||||
case to_integer(unsigned(sel)) is
|
||||
when 0 => out1 <= in1 after g_tMux;
|
||||
when 1 => out1 <= in2 after g_tMux;
|
||||
when 2 => out1 <= in3 after g_tMux;
|
||||
when 3 => out1 <= in4 after g_tMux;
|
||||
when others => out1 <= (others => 'X') after g_tMux;
|
||||
end case;
|
||||
end process muxSelect;
|
||||
|
||||
END ARCHITECTURE rtl;
|
53
Libs/RiscV/HEIRV32/hdl/registerFile_rtl.vhd
Normal file
53
Libs/RiscV/HEIRV32/hdl/registerFile_rtl.vhd
Normal file
@ -0,0 +1,53 @@
|
||||
|
||||
ARCHITECTURE rtl OF registerFile IS
|
||||
-- Bank of register
|
||||
type t_registersBank is array (31 downto 0) of
|
||||
std_ulogic_vector(31 downto 0);
|
||||
-- A bank of registers
|
||||
signal larr_registers: t_registersBank;
|
||||
signal lvec_btns : std_ulogic_vector(31 downto 0);
|
||||
BEGIN
|
||||
-- Special regs
|
||||
process(rst, clk)
|
||||
begin
|
||||
if rst = '1' then
|
||||
lvec_btns <= (others => '0');
|
||||
elsif rising_edge(clk) then
|
||||
lvec_btns <= (btns'length to g_datawidth-1 => '0') & btns;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-- Clocked write
|
||||
process(rst, clk) begin
|
||||
if rst = '1' then
|
||||
larr_registers <= (others => (others => '0')) after g_tRfWr;
|
||||
elsif rising_edge(clk) then
|
||||
if writeEnable3 = '1' and en = '1' then
|
||||
larr_registers(to_integer(unsigned(addr3))) <= writeData after (g_tRfWr + g_tSetup);
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-- Comb. read
|
||||
-- Addr 0 wired to 0s
|
||||
process(addr1, addr2) begin
|
||||
if (to_integer(unsigned(addr1)) = 0) then
|
||||
RD1 <= (others => '0') after g_tRfRd;
|
||||
elsif (to_integer(unsigned(addr1)) = 31) then -- buttons
|
||||
RD1 <= lvec_btns after g_tRfRd;
|
||||
else
|
||||
RD1 <= larr_registers(to_integer(unsigned(addr1))) after g_tRfRd;
|
||||
end if;
|
||||
|
||||
if (to_integer(unsigned(addr2)) = 0) then
|
||||
RD2 <= (others => '0') after g_tRfRd;
|
||||
elsif (to_integer(unsigned(addr2)) = 31) then -- buttons
|
||||
RD2 <= lvec_btns after g_tRfRd;
|
||||
else
|
||||
RD2 <= larr_registers(to_integer(unsigned(addr2))) after g_tRfRd;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
leds <= larr_registers(30);
|
||||
|
||||
END ARCHITECTURE rtl;
|
4
Libs/RiscV/HEIRV32/hds/.hdlsidedata/_ALU_rtl.vhd._fpf
Normal file
4
Libs/RiscV/HEIRV32/hds/.hdlsidedata/_ALU_rtl.vhd._fpf
Normal file
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
4
Libs/RiscV/HEIRV32/hds/.hdlsidedata/_extend_rtl.vhd._fpf
Normal file
4
Libs/RiscV/HEIRV32/hds/.hdlsidedata/_extend_rtl.vhd._fpf
Normal file
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1 @@
|
||||
DIALECT atom VHDL_2008
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
DIALECT atom VHDL_2008
|
||||
INCLUDE list {
|
||||
DEFAULT atom 1
|
||||
}
|
1641
Libs/RiscV/HEIRV32/hds/@a@l@u/symbol.sb
Normal file
1641
Libs/RiscV/HEIRV32/hds/@a@l@u/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
2
Libs/RiscV/HEIRV32/hds/_alu._epf
Normal file
2
Libs/RiscV/HEIRV32/hds/_alu._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom ALU_rtl.vhd
|
2
Libs/RiscV/HEIRV32/hds/_aludecoder._epf
Normal file
2
Libs/RiscV/HEIRV32/hds/_aludecoder._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom aluDecoder_rtl.vhd
|
2
Libs/RiscV/HEIRV32/hds/_bramaddrreducer._epf
Normal file
2
Libs/RiscV/HEIRV32/hds/_bramaddrreducer._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom bramAddrReducer_rtl.vhd
|
2
Libs/RiscV/HEIRV32/hds/_bufferstdulogenable._epf
Normal file
2
Libs/RiscV/HEIRV32/hds/_bufferstdulogenable._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom bufferStdULogEnable_rtl.vhd
|
2
Libs/RiscV/HEIRV32/hds/_bufferunsignedenable._epf
Normal file
2
Libs/RiscV/HEIRV32/hds/_bufferunsignedenable._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom bufferUnsignedEnable_rtl.vhd
|
2
Libs/RiscV/HEIRV32/hds/_extend._epf
Normal file
2
Libs/RiscV/HEIRV32/hds/_extend._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom extend_rtl.vhd
|
2
Libs/RiscV/HEIRV32/hds/_mux4to1ulogvec._epf
Normal file
2
Libs/RiscV/HEIRV32/hds/_mux4to1ulogvec._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom mux4To1ULogVec_rtl.vhd
|
2
Libs/RiscV/HEIRV32/hds/_registerfile._epf
Normal file
2
Libs/RiscV/HEIRV32/hds/_registerfile._epf
Normal file
@ -0,0 +1,2 @@
|
||||
DEFAULT_ARCHITECTURE atom rtl
|
||||
DEFAULT_FILE atom registerFile_rtl.vhd
|
1614
Libs/RiscV/HEIRV32/hds/alu@decoder/symbol.sb
Normal file
1614
Libs/RiscV/HEIRV32/hds/alu@decoder/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1435
Libs/RiscV/HEIRV32/hds/bram@addr@reducer/symbol.sb
Normal file
1435
Libs/RiscV/HEIRV32/hds/bram@addr@reducer/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1642
Libs/RiscV/HEIRV32/hds/buffer@std@u@log@enable/symbol.sb
Normal file
1642
Libs/RiscV/HEIRV32/hds/buffer@std@u@log@enable/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1658
Libs/RiscV/HEIRV32/hds/buffer@unsigned@enable/symbol.sb
Normal file
1658
Libs/RiscV/HEIRV32/hds/buffer@unsigned@enable/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1550
Libs/RiscV/HEIRV32/hds/extend/symbol.sb
Normal file
1550
Libs/RiscV/HEIRV32/hds/extend/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
1701
Libs/RiscV/HEIRV32/hds/mux4@to1@u@log@vec/symbol.sb
Normal file
1701
Libs/RiscV/HEIRV32/hds/mux4@to1@u@log@vec/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
2190
Libs/RiscV/HEIRV32/hds/register@file/symbol.sb
Normal file
2190
Libs/RiscV/HEIRV32/hds/register@file/symbol.sb
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user