Archived
1
0

Initial commit

This commit is contained in:
github-classroom[bot]
2024-02-23 13:01:05 +00:00
committed by GitHub
commit d212040c30
1914 changed files with 1290006 additions and 0 deletions

View 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;

View 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;

View 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;

View 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;