OpenCores
URL https://opencores.org/ocsvn/tinyvliw8/tinyvliw8/trunk

Subversion Repositories tinyvliw8

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /tinyvliw8
    from Rev 8 to Rev 9
    Reverse comparison

Rev 8 → Rev 9

/trunk/testbench/sysArch_tb.vhd
1,3 → 1,37
-------------------------------------------------------------------------------
--
-- Design: tinyVLIW8 soft-core processor
-- Author: Oliver Stecklina <stecklina@ihp-microelectronics.com>
-- Date: 24.10.2013
-- File: sysArch_tb.vhd
--
-------------------------------------------------------------------------------
--
-- Description : System architecture testbench. Using a ROM initialized by
-- ihex file to simplify system tests.
--
-------------------------------------------------------------------------------
--
-- Copyright (C) 2015 IHP GmbH, Frankfurt (Oder), Germany
--
-- This code is free software. It is licensed under the EUPL, Version 1.1
-- or - as soon they will be approved by the European Commission - subsequent
-- versions of the EUPL (the "License").
-- You may redistribute this code and/or modify it under the terms of this
-- License.
-- You may not use this work except in compliance with the License.
-- You may obtain a copy of the License at:
--
-- http://joinup.ec.europa.eu/software/page/eupl/licence-eupl
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" basis,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-------------------------------------------------------------------------------
 
library IEEE;
use IEEE.std_logic_1164.all;
 
51,27 → 85,6
);
end component;
 
component symDecoder
port (
clk : in std_logic;
 
codeA : in std_logic;
codeB : in std_logic;
ioAddr : in std_logic_vector(3 downto 0); -- register address
ioWriteEn_n : in std_logic; -- write enable, low active
ioReadEn_n : in std_logic; -- read enable, low active
 
ioDataOut : out std_logic_vector(7 downto 0); -- data bus for writing register
ioDataIn : in std_logic_vector(7 downto 0); -- data bus for reading register
 
irq : out std_logic;
irq_ack : in std_logic;
 
rst_n : in std_logic
);
end component;
 
component lib_tb_clock32kHz is
port (
signal clk : out std_logic;
99,22 → 112,6
);
end component;
 
component wurCodeGen_tb is
port (
clk : in std_logic;
 
pattern : in std_logic_vector(31 downto 0);
mask : in std_logic_vector(31 downto 0);
 
codeA : out std_logic;
codeB : out std_logic;
 
finished : out std_logic;
 
rst_n : in std_logic
);
end component;
 
component gendelay
generic (n: integer := 1);
port (
161,16 → 158,6
signal dataInClk_s : std_logic;
signal dataOutClk_s : std_logic;
 
signal ioSymRdEn_n_s : std_logic;
 
signal wurPattern_s : std_Logic_vector(31 downto 0);
signal wurMsk_s : std_Logic_vector(31 downto 0);
signal codeA_s : std_logic;
signal codeB_s : std_logic;
 
signal wurCodeEn_n_s : std_logic;
signal wurCodeFin_s : std_logic;
 
signal rst_n_s : std_logic := '1';
 
begin
216,40 → 203,6
rst_n => rst_n_s
);
 
symDecoder_i: symDecoder
port map (
clk => clk_s,
 
codeA => codeA_s,
codeB => codeB_s,
ioAddr => ioAddr_s(3 downto 0),
ioWriteEn_n => ioWrEn_n_s,
ioReadEn_n => ioSymRdEn_n_s,
 
ioDataOut => ioDataIn_s,
ioDataIn => ioDataOut_s,
 
irq => irqLine_s,
irq_ack => irqLineAck_s,
 
rst_n => rst_n_s
);
 
ioSymRdEn_n_s <= ioRdEn_n_s when ioAddr_s(7 downto 4) = "0100" else
'1';
 
tb_wurCodeGen_i: wurCodeGen_tb
port map (
clk => clk_s,
pattern => wurPattern_s,
mask => wurMsk_s,
codeA => codeA_s,
codeB => codeB_s,
finished => wurCodeFin_s,
rst_n => wurCodeEn_n_s
);
 
tb_clock32kHz_i: lib_tb_clock32kHz
port map (
clk => clk_s,
257,7 → 210,7
);
 
tb_rom32bit_i: lib_tb_rom32bit
generic map ( fileName => "../programs/sha1Test.ihex" )
generic map ( fileName => "../opencores/tinyvliw8/tinyvliw8/trunk/programs/timerIrq.ihex" )
port map (
addr => instAddr_s,
dataOut => instData_s,
288,31 → 241,5
'0';
dataOutClk_s <= not(dataInClk_s);
 
 
wurGen_p : process
begin
wurMsk_s <= x"ffffffff";
wurPattern_s <= x"abababab";
wurCodeEn_n_s <= '0';
loop
wait on rst_n_s;
exit when rst_n_s = '1';
end loop;
 
loop
wait for 100 ms;
 
wurCodeEn_n_s <= '1';
 
loop
wait on wurCodeFin_s;
exit when wurCodeFin_s = '1';
end loop;
 
wurCodeEn_n_s <= '0';
end loop;
end process;
 
end beh;
 
/trunk/src/vhdl/timer.vhd
1,17 → 1,17
-----------------------------------------------------------------
--
-- Design: tinyVLIW8 soft-core processor
--
-- Design: tinyVLIW8 soft-core processor
-- Author: Oliver Stecklina <stecklina@ihp-microelectronics.com>
-- Date: 27.05.2015
-- File: timer.vhd
--
--
-----------------------------------------------------------------
--
-- Description : 16-bit timer module. The timer provides two
--
-- Description : 16-bit timer module. The timer provides two
-- internal timer modules.
--
--
-----------------------------------------------------------------
--
--
-- Copyright (C) 2015 IHP GmbH, Frankfurt (Oder), Germany
--
-- This code is free software. It is licensed under the EUPL, Version 1.1
29,10 → 29,10
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-----------------------------------------------------------------
--
-----------------------------------------------------------------
 
LIBRARY IEEE;
LIBRARY IEEE;
 
USE IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.all;
57,18 → 57,18
END timer;
 
ARCHITECTURE behav OF timer IS
 
component clock_divider
 
component clock_divider
generic (n: integer := 2);
PORT (
inclk : in std_logic;
outclk : out std_logic;
div : in std_logic_vector((n - 1) downto 0);
en : IN std_logic
inclk : in std_logic;
outclk : out std_logic;
div : in std_logic_vector((n - 1) downto 0);
en : IN std_logic
);
END component;
 
 
component gendelay
generic (n: integer := 1);
port (
76,146 → 76,155
a_out : out std_logic
);
end component;
 
signal clk_s : std_logic;
signal rst_n_s : std_logic;
 
-- signal clk_s : std_logic;
signal rst_n_s : std_logic;
signal cnt_reg : std_logic_vector(15 downto 0); -- state counter
signal ifg_reg : std_logic_vector(1 downto 0);
 
signal ccr0 : std_logic_vector(15 downto 0);
signal ccr1 : std_logic_vector(15 downto 0);
-- | clr(7) | mode(6) | ie1(5) | ie0(4) | .. | div(2 .. 1) | en(0) |
signal ctl_reg : std_logic_vector(6 downto 0);
 
signal irq_s : std_logic;
signal ifgEn_s : std_logic;
signal divclk_s : std_logic;
 
signal clrBit_s : std_logic;
signal clr_s : std_logic;
 
 
signal ccr0 : std_logic_vector(15 downto 0);
signal ccr1 : std_logic_vector(15 downto 0);
-- | clr(7) | mode(6) | ie1(5) | ie0(4) | .. | div(2 .. 1) | en(0) |
signal ctl_reg : std_logic_vector(6 downto 0);
 
signal irq_s : std_logic;
signal ifgEn_s : std_logic;
signal divclk_s : std_logic;
 
signal clrBit_s : std_logic;
signal clr_s : std_logic;
signal rst_tar_cnt : std_logic;
 
BEGIN
 
delay_i: gendelay
generic map (n => 2)
port map (
a_in => clrBit_s,
a_out => clr_s
);
 
rst_n_s <= rst_n;
clk_s <= clk;
clk_div_i : clock_divider
generic map (n => 2)
port map (
inclk => clk_s,
outclk => divclk_s,
 
div => ctl_reg(2 downto 1),
en => ctl_reg(0)
);
tar_cnt : process (divclk_s, rst_n_s, clr_s) -- state counter
 
-- delay_i: gendelay
-- generic map (n => 2)
-- port map (
-- a_in => clrBit_s,
-- a_out => clr_s
-- );
clr_s <= clrBit_s;
rst_n_s <= rst_n;
-- clk_s <= clk;
clk_div_i : clock_divider
generic map (n => 2)
port map (
inclk => clk,
outclk => divclk_s,
 
div => ctl_reg(2 downto 1),
en => ctl_reg(0)
);
 
clrBit_s <= '1' when dataIn(7) = '1' and readEn_n = '0' and addr = "000" and writeEn_n = '0' else
'0';
rst_tar_cnt <='0' when rst_n_s='0' else
'0' when clrBit_s='1' else
'1';
 
tar_cnt : process (divclk_s, rst_tar_cnt) -- state counter
variable cnt: unsigned (15 downto 0);
BEGIN
IF (rst_n_s = '0' or clr_s = '1') THEN
--IF (rst_n_s = '0' or clr_s = '1') THEN
IF (rst_tar_cnt='0') THEN
cnt := (others => '0');
ELSE
if (divclk_s'EVENT AND divclk_s = '1') THEN -- rising SCKL edge
ELSE
if (divclk_s'EVENT AND divclk_s = '1') THEN -- rising SCKL edge
IF (ctl_reg(6) = '0' and cnt = cnt'high) or (ctl_reg(6) = '1' and cnt = unsigned(ccr0)) THEN
cnt := (others => '0');
ELSE
cnt := cnt + 1;
END IF;
END IF;
END if;
END IF;
END IF;
cnt_reg <= std_logic_vector(cnt);
END PROCESS;
 
irq_en : process(rst_n_s, clk_s)
begin
 
irq_en : process(rst_n_s, clk)
begin
IF (rst_n_s = '0') THEN
irq_s <= '0';
ELSE
if (clk_s'EVENT AND clk_s = '0') THEN -- falling SCKL edge
if (irq_ack = '1') then
irq_s <= '0';
else
if ((ctl_reg(4) = '1' and cnt_reg = ccr0 and ifg_reg(0) = '0') or (ctl_reg(5) = '1' and cnt_reg = ccr1 and ifg_reg(1) = '0')) then
irq_s <= '1';
end if;
end if;
end if;
end if;
end process;
 
ifgEn_s <= irq_s or not(writeEn_n);
ifg : process(rst_n_s, ifgEn_s)
ELSE
if (clk'EVENT AND clk = '0') THEN -- falling SCKL edge
if (irq_ack = '1') then
irq_s <= '0';
else
if ((ctl_reg(4) = '1' and cnt_reg = ccr0 and ifg_reg(0) = '0') or (ctl_reg(5) = '1' and cnt_reg = ccr1 and ifg_reg(1) = '0')) then
irq_s <= '1';
end if;
end if;
end if;
end if;
end process;
 
ifgEn_s <= irq_s or not(writeEn_n);
ifg : process(rst_n_s, ifgEn_s)
BEGIN
IF (rst_n_s = '0') THEN
ifg_reg <= (others => '0');
ELSE
if (ifgEn_s'event and ifgEn_s = '1') then
if (irq_s = '1') then
if (ctl_reg(4) = '1' and cnt_reg = ccr0) then
ifg_reg(0) <= '1';
end if;
if (ctl_reg(5) = '1' and cnt_reg = ccr1) then
ifg_reg(1) <= '1';
end if;
else
if (readEn_n = '0' and writeEn_n = '0' and addr = "001") then
ifg_reg <= ifg_reg and not(dataIn(1 downto 0));
end if;
end if;
end if;
end if;
end process;
wr_reg : process(rst_n_s, readEn_n, writeEn_n) -- state counter
ELSE
if (ifgEn_s'event and ifgEn_s = '1') then
if (irq_s = '1') then
if (ctl_reg(4) = '1' and cnt_reg = ccr0) then
ifg_reg(0) <= '1';
end if;
if (ctl_reg(5) = '1' and cnt_reg = ccr1) then
ifg_reg(1) <= '1';
end if;
else
if (readEn_n = '0' and writeEn_n = '0' and addr = "001") then
ifg_reg <= ifg_reg and not(dataIn(1 downto 0));
end if;
end if;
end if;
end if;
end process;
wr_reg : process(rst_n_s, readEn_n, writeEn_n) -- state counter
BEGIN
IF (rst_n_s = '0') THEN
ctl_reg <= (others => '0');
ctl_reg <= (others => '0');
ccr0 <= (others => '0');
ccr1 <= (others => '0');
ELSE
if (readEn_n = '0') then
if (writeEn_n'event and writeEn_n = '0') then
CASE addr IS
when "000" => ctl_reg <= dataIn(6 downto 0);
when "100" => ccr0(7 downto 0) <= dataIn;
when "101" => ccr0(15 downto 8) <= dataIn;
when "110" => ccr1(7 downto 0) <= dataIn;
when "111" => ccr1(15 downto 8) <= dataIn;
WHEN others => null;
END CASE;
end if;
end if;
end if;
ELSE
if (readEn_n = '0') then
if (writeEn_n'event and writeEn_n = '0') then
CASE addr IS
when "000" => ctl_reg <= dataIn(6 downto 0);
when "100" => ccr0(7 downto 0) <= dataIn;
when "101" => ccr0(15 downto 8) <= dataIn;
when "110" => ccr1(7 downto 0) <= dataIn;
when "111" => ccr1(15 downto 8) <= dataIn;
WHEN others => null;
END CASE;
end if;
end if;
end if;
END PROCESS;
 
clrBit_s <= '1' when dataIn(7) = '1' and readEn_n = '0' and addr = "000" and writeEn_n = '0' else
'0';
 
dataOut <= '0' & ctl_reg when rst_n_s = '1' and readEn_n = '0' and addr = "000" else
"000000" & ifg_reg(1 downto 0) when rst_n_s = '1' and readEn_n = '0' and addr = "001" else
cnt_reg(7 downto 0) when rst_n_s = '1' and readEn_n = '0' and addr = "010" else
cnt_reg(15 downto 8) when rst_n_s = '1' and readEn_n = '0' and addr = "011" else
ccr0(7 downto 0) when rst_n_s = '1' and readEn_n = '0' and addr = "100" else
ccr0(15 downto 8) when rst_n_s = '1' and readEn_n = '0' and addr = "101" else
ccr1(7 downto 0) when rst_n_s = '1' and readEn_n = '0' and addr = "110" else
ccr1(15 downto 8) when rst_n_s = '1' and readEn_n = '0' and addr = "111" else
(others => '0');
irq <= irq_s when rst_n_s = '1' else
'0';
 
 
dataOut <= '0' & ctl_reg when rst_n_s = '1' and readEn_n = '0' and addr = "000" else
"000000" & ifg_reg(1 downto 0) when rst_n_s = '1' and readEn_n = '0' and addr = "001" else
cnt_reg(7 downto 0) when rst_n_s = '1' and readEn_n = '0' and addr = "010" else
cnt_reg(15 downto 8) when rst_n_s = '1' and readEn_n = '0' and addr = "011" else
ccr0(7 downto 0) when rst_n_s = '1' and readEn_n = '0' and addr = "100" else
ccr0(15 downto 8) when rst_n_s = '1' and readEn_n = '0' and addr = "101" else
ccr1(7 downto 0) when rst_n_s = '1' and readEn_n = '0' and addr = "110" else
ccr1(15 downto 8) when rst_n_s = '1' and readEn_n = '0' and addr = "111" else
(others => '0');
irq <= irq_s when rst_n_s = '1' else
'0';
END behav;
 
/trunk/src/vhdl/proc/pcReg.vhd
142,16 → 142,23
end if;
end if;
 
if (irq = '1') then
pcIrq_s <= pcReg_v;
pcReg_s <= "111111111" & irqAddr;
else
pcReg_s <= pcReg_v;
end if;
pcReg_s <= pcReg_v;
 
end if;
end if;
end process;
irq_Assign: process(rst_n, irq)
begin
if (rst_n = '0') then
pcIrq_s <= (others => '0');
else
if (irq'event and irq = '1') then
pcIrq_s <= pcReg_s;
end if;
end if;
end process;
 
pcLoad_n <= pcLoad_n_s when rst_n = '1' and delayedState3_s = '1' else
'1';
pcRegUpd_s <= state3_s when rst_n = '1' and stalled_n = '1' else
158,7 → 165,8
'1' when rst_n = '1' and irq = '1' else
'0';
 
addrOut <= pcReg_s;
addrOut <= pcReg_s when irq = '0' else
"111111111" & irqAddr;
ioOut <= pcInt_s(7 downto 0) when (rst_n = '1' and ioInEn_n = '0' and ioAddr = "00") else
"00000" & pcInt_s(10 downto 8) when (rst_n = '1' and ioInEn_n = '0' and ioAddr = "01") else
/trunk/src/vhdl/proc/instDecoder.vhd
1,54 → 1,75
-----------------------------------------------------------------
-- Project: Aeternitas
-------------------------------------------------------------------------------
--
-- Design: tinyVLIW8 soft-core processor
-- Author: Oliver Stecklina <stecklina@ihp-microelectronics.com>
-- Date: 03.02.2014
-- File: instDecoder.vhd
-- Design: AeternitasSWUR
-----------------------------------------------------------------
-- Description : This unit is the instruction set decoder of the
--
-------------------------------------------------------------------------------
--
-- Description : This unit is the instruction set decoder of the
-- embedded 8-bit VLIW processor.
-----------------------------------------------------------------
-- $Log$
-----------------------------------------------------------------
 
library ieee;
--
-------------------------------------------------------------------------------
--
-- Copyright (C) 2015 IHP GmbH, Frankfurt (Oder), Germany
--
-- This code is free software. It is licensed under the EUPL, Version 1.1
-- or - as soon they will be approved by the European Commission - subsequent
-- versions of the EUPL (the "License").
-- You may redistribute this code and/or modify it under the terms of this
-- License.
-- You may not use this work except in compliance with the License.
-- You may obtain a copy of the License at:
--
-- http://joinup.ec.europa.eu/software/page/eupl/licence-eupl
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" basis,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-------------------------------------------------------------------------------
 
library ieee;
 
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
 
entity vliwProc_instDecoder is
port (
clk : in std_logic;
 
instData : in std_logic_vector(31 downto 0);
ldstOpCode : out std_logic;
ldstAs : out std_logic_vector(1 downto 0);
ldstDstReg : out std_logic_vector(2 downto 0);
ldstSrc : out std_logic_vector(7 downto 0);
ldstEn_n : out std_logic;
 
aluOpCode : out std_logic_vector(2 downto 0);
aluAs : out std_logic_vector(1 downto 0);
aluDstReg : out std_logic_vector(2 downto 0);
aluSrc : out std_logic_vector(7 downto 0);
aluEn_n : out std_logic;
 
jmpAs : out std_logic_vector(1 downto 0);
jmpDstReg : out std_logic_vector(10 downto 0);
jmpEn_n : out std_logic;
 
esb : out std_logic_vector(3 downto 0);
stalled_n : out std_logic;
stall_n : in std_logic;
port (
clk : in std_logic;
 
rst_n : in std_logic
instData : in std_logic_vector(31 downto 0);
ldstOpCode : out std_logic;
ldstAs : out std_logic_vector(1 downto 0);
ldstDstReg : out std_logic_vector(2 downto 0);
ldstSrc : out std_logic_vector(7 downto 0);
ldstEn_n : out std_logic;
 
aluOpCode : out std_logic_vector(2 downto 0);
aluAs : out std_logic_vector(1 downto 0);
aluDstReg : out std_logic_vector(2 downto 0);
aluSrc : out std_logic_vector(7 downto 0);
aluEn_n : out std_logic;
 
jmpAs : out std_logic_vector(1 downto 0);
jmpDstReg : out std_logic_vector(10 downto 0);
jmpEn_n : out std_logic;
 
esb : out std_logic_vector(3 downto 0);
stalled_n : out std_logic;
stall_n : in std_logic;
 
rst_n : in std_logic
);
end vliwProc_instDecoder;
architecture behavior of vliwProc_instDecoder is
 
architecture behavior of vliwProc_instDecoder is
 
component gendelay
generic (n: integer := 1);
port (
56,35 → 77,35
a_out : out std_logic
);
end component;
 
signal instWord0_s : std_logic_vector(15 downto 0);
signal instWord1_s : std_logic_vector(15 downto 0);
signal clk_s : std_logic;
 
signal esb_s : std_logic_vector(3 downto 0);
signal untSel0_n_s : std_logic_vector(2 downto 0);
signal untSel1_n_s : std_logic_vector(2 downto 0);
signal stalled_n_s : std_logic;
 
signal ldstEn_n_s : std_logic;
signal aluEn_n_s : std_logic;
signal jmpEn_n_s : std_logic;
 
signal instWord0_s : std_logic_vector(15 downto 0);
signal instWord1_s : std_logic_vector(15 downto 0);
signal clk_s : std_logic;
 
signal esb_s : std_logic_vector(3 downto 0);
signal untSel0_n_s : std_logic_vector(2 downto 0);
signal untSel1_n_s : std_logic_vector(2 downto 0);
signal stalled_n_s : std_logic;
 
signal ldstEn_n_s : std_logic;
signal aluEn_n_s : std_logic;
signal jmpEn_n_s : std_logic;
signal cnt_s : std_logic_vector(1 downto 0);
begin
 
clk_s <= clk;
begin
 
clk_s <= clk;
stalled_n <= stalled_n_s;
 
 
-- Note! use cnt_s instead of esb to be faster than esb
-- otherwise we get a glitch on esb(0) in case of stall
sync_Stall: process(rst_n, cnt_s(0))
begin
if (rst_n = '0') then
stalled_n_s <= '1';
begin
if (rst_n = '0') then
stalled_n_s <= '1';
else
if (cnt_s(0)'event and cnt_s(0) = '1') then
stalled_n_s <= stall_n;
95,7 → 116,7
ldstEn_n <= ldstEn_n_s;
jmpEn_n <= jmpEn_n_s;
aluEn_n <= aluEn_n_s;
 
 
genState_p : process(rst_n, clk_s)
begin
if (rst_n = '0') then
110,7 → 131,7
end if;
end if;
end process;
 
 
-- execution state bus
esb_s <= "0001" when rst_n = '1' and cnt_s = "01" else
"0010" when rst_n = '1' and cnt_s = "11" else
117,10 → 138,10
"0100" when rst_n = '1' and cnt_s = "10" else
"1000" when rst_n = '1' and cnt_s = "00" else
"0000";
 
esb <= esb_s when stalled_n_s = '1' else
(others => '0');
 
 
esb <= esb_s when stalled_n_s = '1' else
(others => '0');
 
untSel1_n_s <= "111" when instWord0_s(15 downto 13) = instWord1_s(15 downto 13) else
"110" when instWord1_s(15 downto 13) = "111" else
"101" when instWord1_s(15 downto 13) = "000" or instWord1_s(15 downto 13) = "001" else
130,48 → 151,48
"101" when instWord0_s(15 downto 13) = "000" or instWord0_s(15 downto 13) = "001" else
"011";
 
 
jmpEn_n_s <= '0' when (untSel0_n_s(0) = '0' or untSel1_n_s(0) = '0') and cnt_s(1) = '1' else
'1';
ldstEn_n_s <= '0' when (untSel0_n_s(1) = '0' or untSel1_n_s(1) = '0') and cnt_s(1) = '1' else
'1';
aluEn_n_s <= '0' when (untSel0_n_s(2) = '0' or untSel1_n_s(2) = '0') and cnt_s(1) = '1' else
'1';
 
instWord0_s <= instData(31 downto 16);
instWord1_s <= instData(15 downto 0);
aluOpCode <= instWord0_s(15 downto 13) when untSel0_n_s(2) = '0' else
instWord1_s(15 downto 13) when untSel1_n_s(2) = '0' else
(others => '0');
aluAs <= instWord0_s(12 downto 11) when untSel0_n_s(2) = '0' else
instWord1_s(12 downto 11) when untSel1_n_s(2) = '0' else
(others => '0');
aluDstReg <= instWord0_s(10 downto 8) when untSel0_n_s(2) = '0' else
instWord1_s(10 downto 8) when untSel1_n_s(2) = '0' else
(others => '0');
aluSrc <= instWord0_s(7 downto 0) when untSel0_n_s(2) = '0' else
instWord1_s(7 downto 0) when untSel1_n_s(2) = '0' else
(others => '0');
 
ldstOpCode <= instWord0_s(13) when untSel0_n_s(1) = '0' else
instWord1_s(13) when untSel1_n_s(1) = '0' else
'0';
ldstAs <= instWord0_s(12 downto 11) when untSel0_n_s(1) = '0' else
instWord1_s(12 downto 11) when untSel1_n_s(1) = '0' else
(others => '0');
ldstDstReg <= instWord0_s(10 downto 8) when untSel0_n_s(1) = '0' else
instWord1_s(10 downto 8) when untSel1_n_s(1) = '0' else
(others => '0');
ldstSrc <= instWord0_s(7 downto 0) when untSel0_n_s(1) = '0' else
instWord1_s(7 downto 0) when untSel1_n_s(1) = '0' else
(others => '0');
 
jmpAs <= instWord0_s(12 downto 11) when untSel0_n_s(0) = '0' else
instWord1_s(12 downto 11) when untSel1_n_s(0) = '0' else
(others => '0');
jmpDstReg <= instWord0_s(10 downto 0) when untSel0_n_s(0) = '0' else
instWord1_s(10 downto 0) when untSel1_n_s(0) = '0' else
(others => '0');
end behavior;
 
jmpEn_n_s <= '0' when (untSel0_n_s(0) = '0' or untSel1_n_s(0) = '0') and cnt_s(1) = '1' else
'1';
ldstEn_n_s <= '0' when (untSel0_n_s(1) = '0' or untSel1_n_s(1) = '0') and cnt_s(1) = '1' else
'1';
aluEn_n_s <= '0' when (untSel0_n_s(2) = '0' or untSel1_n_s(2) = '0') and cnt_s(1) = '1' else
'1';
 
instWord0_s <= instData(31 downto 16);
instWord1_s <= instData(15 downto 0);
aluOpCode <= instWord0_s(15 downto 13) when untSel0_n_s(2) = '0' else
instWord1_s(15 downto 13) when untSel1_n_s(2) = '0' else
(others => '0');
aluAs <= instWord0_s(12 downto 11) when untSel0_n_s(2) = '0' else
instWord1_s(12 downto 11) when untSel1_n_s(2) = '0' else
(others => '0');
aluDstReg <= instWord0_s(10 downto 8) when untSel0_n_s(2) = '0' else
instWord1_s(10 downto 8) when untSel1_n_s(2) = '0' else
(others => '0');
aluSrc <= instWord0_s(7 downto 0) when untSel0_n_s(2) = '0' else
instWord1_s(7 downto 0) when untSel1_n_s(2) = '0' else
(others => '0');
 
ldstOpCode <= instWord0_s(13) when untSel0_n_s(1) = '0' else
instWord1_s(13) when untSel1_n_s(1) = '0' else
'0';
ldstAs <= instWord0_s(12 downto 11) when untSel0_n_s(1) = '0' else
instWord1_s(12 downto 11) when untSel1_n_s(1) = '0' else
(others => '0');
ldstDstReg <= instWord0_s(10 downto 8) when untSel0_n_s(1) = '0' else
instWord1_s(10 downto 8) when untSel1_n_s(1) = '0' else
(others => '0');
ldstSrc <= instWord0_s(7 downto 0) when untSel0_n_s(1) = '0' else
instWord1_s(7 downto 0) when untSel1_n_s(1) = '0' else
(others => '0');
 
jmpAs <= instWord0_s(12 downto 11) when untSel0_n_s(0) = '0' else
instWord1_s(12 downto 11) when untSel1_n_s(0) = '0' else
(others => '0');
jmpDstReg <= instWord0_s(10 downto 0) when untSel0_n_s(0) = '0' else
instWord1_s(10 downto 0) when untSel1_n_s(0) = '0' else
(others => '0');
end behavior;
/trunk/src/vhdl/proc/vliwProc.vhd
1,16 → 1,16
-----------------------------------------------------------------
--
-- Design: tinyVLIW8 soft-core processor
-------------------------------------------------------------------------------
--
-- Design: tinyVLIW8 soft-core processor
-- Author: Oliver Stecklina <stecklina@ihp-microelectronics.com>
-- Date: 24.10.2013
-- File: vliwProc.vhd
--
-----------------------------------------------------------------
--
--
-------------------------------------------------------------------------------
--
-- Description : This unit is the VLIW processor core.
--
-----------------------------------------------------------------
--
--
-------------------------------------------------------------------------------
--
-- Copyright (C) 2015 IHP GmbH, Frankfurt (Oder), Germany
--
-- This code is free software. It is licensed under the EUPL, Version 1.1
28,144 → 28,144
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-----------------------------------------------------------------
 
library ieee;
--
-------------------------------------------------------------------------------
 
library ieee;
 
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
 
entity vliwProc is
port (
-- clock input
clk : in std_logic;
 
-- instruction bus
instMemAddr : out std_logic_vector(10 downto 0);
instMemDataIn : in std_logic_vector(31 downto 0);
instMemEn_n : out std_logic;
-- IO bus
ioMemAddr : out std_logic_vector(7 downto 0);
ioMemDataOut : out std_logic_vector(7 downto 0);
ioMemDataIn : in std_logic_vector(7 downto 0);
ioMemWr_n : out std_logic;
ioMemEn_n : out std_logic;
 
-- IO bus
dataMemAddr : out std_logic_vector(7 downto 0);
dataMemDataOut : out std_logic_vector(7 downto 0);
dataMemDataIn : in std_logic_vector(7 downto 0);
dataMemWr_n : out std_logic;
dataMemEn_n : out std_logic;
 
-- interrupt handling
irqLine : in std_logic_vector(4 downto 0);
irqLineAck : out std_logic_vector(4 downto 0);
-- irqEn : out std_logic;
-- process stall signals and stall acknowledgment
stall_n : in std_logic;
stalled_n : out std_logic;
-- reset input
rst_n : in std_logic
port (
-- clock input
clk : in std_logic;
 
-- instruction bus
instMemAddr : out std_logic_vector(10 downto 0);
instMemDataIn : in std_logic_vector(31 downto 0);
instMemEn_n : out std_logic;
-- IO bus
ioMemAddr : out std_logic_vector(7 downto 0);
ioMemDataOut : out std_logic_vector(7 downto 0);
ioMemDataIn : in std_logic_vector(7 downto 0);
ioMemWr_n : out std_logic;
ioMemEn_n : out std_logic;
 
-- IO bus
dataMemAddr : out std_logic_vector(7 downto 0);
dataMemDataOut : out std_logic_vector(7 downto 0);
dataMemDataIn : in std_logic_vector(7 downto 0);
dataMemWr_n : out std_logic;
dataMemEn_n : out std_logic;
 
-- interrupt handling
irqLine : in std_logic_vector(4 downto 0);
irqLineAck : out std_logic_vector(4 downto 0);
-- irqEn : out std_logic;
-- process stall signals and stall acknowledgment
stall_n : in std_logic;
stalled_n : out std_logic;
-- reset input
rst_n : in std_logic
);
end vliwProc;
architecture behavior of vliwProc is
 
component vliwProc_instDecoder
port (
clk : in std_logic;
instData : in std_logic_vector(31 downto 0);
 
ldstOpCode : out std_logic;
ldstAs : out std_logic_vector(1 downto 0);
ldstDstReg : out std_logic_vector(2 downto 0);
ldstSrc : out std_logic_vector(7 downto 0);
ldstEn_n : out std_logic;
 
aluOpCode : out std_logic_vector(2 downto 0);
aluAs : out std_logic_vector(1 downto 0);
aluDstReg : out std_logic_vector(2 downto 0);
aluSrc : out std_logic_vector(7 downto 0);
aluEn_n : out std_logic;
 
jmpAs : out std_logic_vector(1 downto 0);
jmpDstReg : out std_logic_vector(10 downto 0);
jmpEn_n : out std_logic;
 
esb : out std_logic_vector(3 downto 0);
stall_n : in std_logic;
stalled_n : out std_logic;
rst_n : in std_logic
);
end component;
 
architecture behavior of vliwProc is
 
component vliwProc_instDecoder
port (
clk : in std_logic;
instData : in std_logic_vector(31 downto 0);
 
ldstOpCode : out std_logic;
ldstAs : out std_logic_vector(1 downto 0);
ldstDstReg : out std_logic_vector(2 downto 0);
ldstSrc : out std_logic_vector(7 downto 0);
ldstEn_n : out std_logic;
 
aluOpCode : out std_logic_vector(2 downto 0);
aluAs : out std_logic_vector(1 downto 0);
aluDstReg : out std_logic_vector(2 downto 0);
aluSrc : out std_logic_vector(7 downto 0);
aluEn_n : out std_logic;
 
jmpAs : out std_logic_vector(1 downto 0);
jmpDstReg : out std_logic_vector(10 downto 0);
jmpEn_n : out std_logic;
 
esb : out std_logic_vector(3 downto 0);
stall_n : in std_logic;
stalled_n : out std_logic;
rst_n : in std_logic
);
end component;
 
component vliwProc_statusReg
port (
state : in std_logic_vector(3 downto 0);
 
iretEn_n : in std_logic;
ioEn_n : in std_logic;
irqEn : in std_logic;
flagsEn_n : in std_logic;
flagsIn : in std_logic_vector(1 downto 0); -- carry | zero
dataIn : in std_logic_vector(7 downto 0);
dataOut : out std_logic_vector(7 downto 0);
rst_n : in std_logic
port (
state : in std_logic_vector(3 downto 0);
 
iretEn_n : in std_logic;
ioEn_n : in std_logic;
irqEn : in std_logic;
flagsEn_n : in std_logic;
flagsIn : in std_logic_vector(1 downto 0); -- carry | zero
dataIn : in std_logic_vector(7 downto 0);
dataOut : out std_logic_vector(7 downto 0);
rst_n : in std_logic
);
end component;
 
component vliwProc_pcReg
port (
addrOut : out std_logic_vector(10 downto 0);
state : in std_logic_vector(3 downto 0);
stalled_n : in std_logic;
ioAddr : in std_logic_vector(1 downto 0);
ioIn : in std_logic_vector(7 downto 0);
ioOut : out std_logic_vector(7 downto 0);
ioInEn_n : in std_logic;
ioInWr_n : in std_logic;
 
pcLoad_n : out std_logic;
jmpIn : in std_logic_vector(10 downto 0);
jmpInEn_n : in std_logic;
 
irq : in std_logic;
irqAddr : in std_logic_vector(1 downto 0);
 
rst_n : in std_logic
end component;
 
component vliwProc_pcReg
port (
addrOut : out std_logic_vector(10 downto 0);
state : in std_logic_vector(3 downto 0);
stalled_n : in std_logic;
ioAddr : in std_logic_vector(1 downto 0);
ioIn : in std_logic_vector(7 downto 0);
ioOut : out std_logic_vector(7 downto 0);
ioInEn_n : in std_logic;
ioInWr_n : in std_logic;
 
pcLoad_n : out std_logic;
jmpIn : in std_logic_vector(10 downto 0);
jmpInEn_n : in std_logic;
 
irq : in std_logic;
irqAddr : in std_logic_vector(1 downto 0);
 
rst_n : in std_logic
);
end component;
 
end component;
 
component vliwProc_regSet
port (
state : in std_logic_vector(3 downto 0);
port (
state : in std_logic_vector(3 downto 0);
 
reg0 : out std_logic_vector(7 downto 0);
reg1 : out std_logic_vector(7 downto 0);
reg2 : out std_logic_vector(7 downto 0);
reg3 : out std_logic_vector(7 downto 0);
reg4 : out std_logic_vector(7 downto 0);
reg5 : out std_logic_vector(7 downto 0);
reg6 : out std_logic_vector(7 downto 0);
reg7 : out std_logic_vector(7 downto 0);
 
irqEn : in std_logic;
reg0 : out std_logic_vector(7 downto 0);
reg1 : out std_logic_vector(7 downto 0);
reg2 : out std_logic_vector(7 downto 0);
reg3 : out std_logic_vector(7 downto 0);
reg4 : out std_logic_vector(7 downto 0);
reg5 : out std_logic_vector(7 downto 0);
reg6 : out std_logic_vector(7 downto 0);
reg7 : out std_logic_vector(7 downto 0);
 
irqEn : in std_logic;
aluDataIn : in std_logic_vector(7 downto 0);
aluRegSel : in std_logic_vector(2 downto 0);
aluRegEn_n : in std_logic;
174,251 → 174,237
ldstRegSel : in std_logic_vector(2 downto 0);
ldstRegEn_n : in std_logic;
rst_n : in std_logic
rst_n : in std_logic
);
end component;
 
component vliwProc_loadStore
port (
addr : out std_logic_vector(7 downto 0);
dataOut : out std_logic_vector(7 downto 0);
 
ioWr_n : out std_logic;
ioEn_n : out std_logic;
dataWr_n : out std_logic;
dataEn_n : out std_logic;
dataIn : in std_logic_vector(7 downto 0);
ioIn : in std_logic_vector(7 downto 0);
opCode : in std_logic;
as : in std_logic_vector(1 downto 0);
dstReg : in std_logic_vector(2 downto 0);
src : in std_logic_vector(7 downto 0);
cs_n : in std_logic;
state : in std_logic_vector(3 downto 0);
regOut : out std_logic_vector(7 downto 0);
 
reg0 : in std_logic_vector(7 downto 0);
reg1 : in std_logic_vector(7 downto 0);
reg2 : in std_logic_vector(7 downto 0);
reg3 : in std_logic_vector(7 downto 0);
reg4 : in std_logic_vector(7 downto 0);
reg5 : in std_logic_vector(7 downto 0);
reg6 : in std_logic_vector(7 downto 0);
reg7 : in std_logic_vector(7 downto 0);
 
regSel : out std_logic_vector(2 downto 0);
regEn_n : out std_logic;
 
rst_n : in std_logic
);
end component;
 
end component;
 
component vliwProc_loadStore
port (
addr : out std_logic_vector(7 downto 0);
dataOut : out std_logic_vector(7 downto 0);
 
ioWr_n : out std_logic;
ioEn_n : out std_logic;
dataWr_n : out std_logic;
dataEn_n : out std_logic;
dataIn : in std_logic_vector(7 downto 0);
ioIn : in std_logic_vector(7 downto 0);
opCode : in std_logic;
as : in std_logic_vector(1 downto 0);
dstReg : in std_logic_vector(2 downto 0);
src : in std_logic_vector(7 downto 0);
cs_n : in std_logic;
state : in std_logic_vector(3 downto 0);
regOut : out std_logic_vector(7 downto 0);
 
reg0 : in std_logic_vector(7 downto 0);
reg1 : in std_logic_vector(7 downto 0);
reg2 : in std_logic_vector(7 downto 0);
reg3 : in std_logic_vector(7 downto 0);
reg4 : in std_logic_vector(7 downto 0);
reg5 : in std_logic_vector(7 downto 0);
reg6 : in std_logic_vector(7 downto 0);
reg7 : in std_logic_vector(7 downto 0);
 
regSel : out std_logic_vector(2 downto 0);
regEn_n : out std_logic;
 
rst_n : in std_logic
);
end component;
 
component vliwProc_jmpExec
port (
en_n : in std_logic;
esb : in std_logic_vector(3 downto 0);
dst : in std_logic_vector(10 downto 0);
as : in std_logic_vector(1 downto 0);
 
jmpDst : out std_logic_vector(10 downto 0);
jmpEn_n : out std_logic;
 
cz : in std_logic_vector(1 downto 0);
rst_n : in std_logic
);
end component;
 
port (
en_n : in std_logic;
esb : in std_logic_vector(3 downto 0);
dst : in std_logic_vector(10 downto 0);
as : in std_logic_vector(1 downto 0);
 
jmpDst : out std_logic_vector(10 downto 0);
jmpEn_n : out std_logic;
 
cz : in std_logic_vector(1 downto 0);
rst_n : in std_logic
);
end component;
 
component vliwProc_alu
port (
state : in std_logic_vector(3 downto 0);
 
enable_n : in std_logic;
opcode : in std_logic_vector(2 downto 0);
as : in std_logic_vector(1 downto 0);
dstRegIn : in std_logic_vector(2 downto 0);
dataIn : in std_logic_vector(7 downto 0);
 
reg0 : in std_logic_vector(7 downto 0);
reg1 : in std_logic_vector(7 downto 0);
reg2 : in std_logic_vector(7 downto 0);
reg3 : in std_logic_vector(7 downto 0);
reg4 : in std_logic_vector(7 downto 0);
reg5 : in std_logic_vector(7 downto 0);
reg6 : in std_logic_vector(7 downto 0);
reg7 : in std_logic_vector(7 downto 0);
cIn : in std_logic;
cOut : out std_logic;
zOut : out std_logic;
dstRegEn_n : out std_logic;
dstRegOut : out std_logic_vector(2 downto 0);
dataOut : out std_logic_vector(7 downto 0);
rst_n : in std_logic
port (
state : in std_logic_vector(3 downto 0);
 
enable_n : in std_logic;
opcode : in std_logic_vector(2 downto 0);
as : in std_logic_vector(1 downto 0);
dstRegIn : in std_logic_vector(2 downto 0);
dataIn : in std_logic_vector(7 downto 0);
 
reg0 : in std_logic_vector(7 downto 0);
reg1 : in std_logic_vector(7 downto 0);
reg2 : in std_logic_vector(7 downto 0);
reg3 : in std_logic_vector(7 downto 0);
reg4 : in std_logic_vector(7 downto 0);
reg5 : in std_logic_vector(7 downto 0);
reg6 : in std_logic_vector(7 downto 0);
reg7 : in std_logic_vector(7 downto 0);
cIn : in std_logic;
cOut : out std_logic;
zOut : out std_logic;
dstRegEn_n : out std_logic;
dstRegOut : out std_logic_vector(2 downto 0);
dataOut : out std_logic_vector(7 downto 0);
rst_n : in std_logic
);
end component;
 
end component;
 
component vliwProc_irqCntl
port (
state : in std_logic_vector(3 downto 0);
stalled_n : in std_logic;
 
irqLineIn : in std_logic_vector(5 downto 0);
irqLineOut : out std_logic_vector(5 downto 0);
irqAck : out std_logic;
 
irqAddr : out std_logic_vector(1 downto 0);
 
ioDataIn : in std_logic_vector(7 downto 0);
ioDataOut : out std_logic_vector(7 downto 0);
ioInEn_n : in std_logic;
ioInWr_n : in std_logic;
 
enable : in std_logic;
-- reset input
rst_n : in std_logic
port (
state : in std_logic_vector(3 downto 0);
stalled_n : in std_logic;
 
irqLineIn : in std_logic_vector(5 downto 0);
irqLineOut : out std_logic_vector(5 downto 0);
irqAck : out std_logic;
 
irqAddr : out std_logic_vector(1 downto 0);
 
ioDataIn : in std_logic_vector(7 downto 0);
ioDataOut : out std_logic_vector(7 downto 0);
ioInEn_n : in std_logic;
ioInWr_n : in std_logic;
 
enable : in std_logic;
-- reset input
rst_n : in std_logic
);
end component;
signal rst_n_s : std_logic;
signal stall_n_s : std_logic;
signal stalled_n_s : std_logic;
 
signal instAddr_s : std_logic_vector(10 downto 0);
signal instDataIn_s : std_logic_vector(31 downto 0);
signal pcReg_ioOut_s : std_logic_vector(7 downto 0);
signal pcReg_ioInEn_n_s : std_logic;
signal pcReg_ioInWr_n_s : std_logic;
signal dataAddr_s : std_logic_vector(7 downto 0);
 
signal ioDataIn_s : std_logic_vector(7 downto 0);
signal ioWr_n_s : std_logic;
signal ioEn_n_s : std_logic;
signal dataOut_s : std_logic_vector(7 downto 0);
signal dataIn_s : std_logic_vector(7 downto 0);
signal dataWr_n_s : std_logic;
signal dataEn_n_s : std_logic;
 
signal ldstOpCode_s : std_logic;
signal ldstAs_s : std_logic_vector(1 downto 0);
signal ldstDstReg_s : std_logic_vector(2 downto 0);
signal ldstSrc_s : std_logic_vector(7 downto 0);
signal ldstEn_n_s : std_logic;
 
signal aluOpCode_s : std_logic_vector(2 downto 0);
signal aluAs_s : std_logic_vector(1 downto 0);
signal aluDstReg_s : std_logic_vector(2 downto 0);
signal aluSrc_s : std_logic_vector(7 downto 0);
signal aluEn_n_s : std_logic;
 
signal jmpAs_s : std_logic_vector(1 downto 0);
signal jmpDstReg_s : std_logic_vector(10 downto 0);
signal jmpEn_n_s : std_logic;
signal state_s : std_logic_vector(3 downto 0);
signal reg0_s : std_logic_vector(7 downto 0);
signal reg1_s : std_logic_vector(7 downto 0);
signal reg2_s : std_logic_vector(7 downto 0);
signal reg3_s : std_logic_vector(7 downto 0);
signal reg4_s : std_logic_vector(7 downto 0);
signal reg5_s : std_logic_vector(7 downto 0);
signal reg6_s : std_logic_vector(7 downto 0);
signal reg7_s : std_logic_vector(7 downto 0);
 
signal ldStRegSel_s : std_logic_vector(2 downto 0);
signal ldStRegOut_s : std_logic_vector(7 downto 0);
signal ldStRegEn_n_s : std_logic;
signal ldstIoEnOut_n_s : std_logic;
signal ldstIoWrOut_n_s : std_logic;
signal ldstRst_n_s : std_logic;
signal aluRegEn_n_s : std_logic;
signal aluFlags_s : std_logic_vector(1 downto 0);
signal aluRegSel_s : std_logic_vector(2 downto 0);
signal aluRegOut_s : std_logic_vector(7 downto 0);
 
signal pcLoad_n_s : std_logic;
signal jmpOutEn_n_s : std_logic;
signal jmpAddr_s : std_logic_vector(10 downto 0);
signal irqAck_s : std_logic;
signal irqAddr_s : std_logic_vector(1 downto 0);
signal irqLine_s : std_logic_vector(5 downto 0);
signal irqLineAck_s : std_logic_vector(5 downto 0);
signal irq_ioOut_s : std_logic_vector(7 downto 0);
signal irq_ioInEn_n_s : std_logic;
signal irq_ioInWr_n_s : std_logic;
 
signal statusRegData_s : std_logic_vector(7 downto 0);
signal statusRegIoEn_n_s : std_logic;
signal instMemEn_n_s : std_logic;
signal instMemClk_s : std_logic;
begin
 
rst_n_s <= rst_n;
stall_n_s <= stall_n and not(statusRegData_s(7));
stalled_n <= stalled_n_s;
instMemAddr <= instAddr_s;
instMemEn_n <= instMemEn_n_s;
instDataIn_s <= instMemDataIn;
 
-- irqEn <= statusRegData_s(0);
instMemEn_n_s <= '1' when rst_n = '0' or state_s(3) = '1' or
(stall_n_s = '0') else
signal rst_n_s : std_logic;
signal stall_n_s : std_logic;
signal stalled_n_s : std_logic;
 
signal instAddr_s : std_logic_vector(10 downto 0);
signal instDataIn_s : std_logic_vector(31 downto 0);
signal pcReg_ioOut_s : std_logic_vector(7 downto 0);
signal pcReg_ioInEn_n_s : std_logic;
signal pcReg_ioInWr_n_s : std_logic;
signal dataAddr_s : std_logic_vector(7 downto 0);
 
signal ioDataIn_s : std_logic_vector(7 downto 0);
signal ioWr_n_s : std_logic;
signal ioEn_n_s : std_logic;
signal dataOut_s : std_logic_vector(7 downto 0);
signal dataIn_s : std_logic_vector(7 downto 0);
signal dataWr_n_s : std_logic;
signal dataEn_n_s : std_logic;
 
signal ldstOpCode_s : std_logic;
signal ldstAs_s : std_logic_vector(1 downto 0);
signal ldstDstReg_s : std_logic_vector(2 downto 0);
signal ldstSrc_s : std_logic_vector(7 downto 0);
signal ldstEn_n_s : std_logic;
 
signal aluOpCode_s : std_logic_vector(2 downto 0);
signal aluAs_s : std_logic_vector(1 downto 0);
signal aluDstReg_s : std_logic_vector(2 downto 0);
signal aluSrc_s : std_logic_vector(7 downto 0);
signal aluEn_n_s : std_logic;
 
signal jmpAs_s : std_logic_vector(1 downto 0);
signal jmpDstReg_s : std_logic_vector(10 downto 0);
signal jmpEn_n_s : std_logic;
signal state_s : std_logic_vector(3 downto 0);
signal reg0_s : std_logic_vector(7 downto 0);
signal reg1_s : std_logic_vector(7 downto 0);
signal reg2_s : std_logic_vector(7 downto 0);
signal reg3_s : std_logic_vector(7 downto 0);
signal reg4_s : std_logic_vector(7 downto 0);
signal reg5_s : std_logic_vector(7 downto 0);
signal reg6_s : std_logic_vector(7 downto 0);
signal reg7_s : std_logic_vector(7 downto 0);
 
signal ldStRegSel_s : std_logic_vector(2 downto 0);
signal ldStRegOut_s : std_logic_vector(7 downto 0);
signal ldStRegEn_n_s : std_logic;
signal ldstIoEnOut_n_s : std_logic;
signal ldstIoWrOut_n_s : std_logic;
signal ldstRst_n_s : std_logic;
signal aluRegEn_n_s : std_logic;
signal aluFlags_s : std_logic_vector(1 downto 0);
signal aluRegSel_s : std_logic_vector(2 downto 0);
signal aluRegOut_s : std_logic_vector(7 downto 0);
 
signal pcLoad_n_s : std_logic;
signal jmpOutEn_n_s : std_logic;
signal jmpAddr_s : std_logic_vector(10 downto 0);
signal irqAck_s : std_logic;
signal irqAddr_s : std_logic_vector(1 downto 0);
signal irqLine_s : std_logic_vector(5 downto 0);
signal irqLineAck_s : std_logic_vector(5 downto 0);
signal irq_ioOut_s : std_logic_vector(7 downto 0);
signal irq_ioInEn_n_s : std_logic;
signal irq_ioInWr_n_s : std_logic;
 
signal statusRegData_s : std_logic_vector(7 downto 0);
signal statusRegIoEn_n_s : std_logic;
signal instMemEn_n_s : std_logic;
signal instMemClk_s : std_logic;
begin
 
rst_n_s <= rst_n;
stall_n_s <= stall_n and not(statusRegData_s(7));
stalled_n <= stalled_n_s;
instMemAddr <= instAddr_s;
instMemEn_n <= instMemEn_n_s;
instDataIn_s <= instMemDataIn;
 
-- irqEn <= statusRegData_s(0);
instMemEn_n_s <= '1' when rst_n = '0' or state_s(3) = '1' or (stall_n_s = '0') else
'0';
-- instMemClk_s <= '1' when state_s(0) = '1' or state_s(2) = '1' else
-- '0';
-- stateGen_proc : process(rst_n, instMemClk_s)
-- begin
-- if (rst_n = '0') then
-- instMemEn_n_s <= '1';
-- else
-- if (instMemClk_s'event and instMemClk_s = '1') then
-- instMemEn_n_s <= not(instMemEn_n_s);
-- end if;
-- end if;
-- end process;
------------------------------------------------------------------------------------------
--
 
------------------------------------------------------------------------------------------
--
-- register Set
--
------------------------------------------------------------------------------------------
--
------------------------------------------------------------------------------------------
vliwProc_regSet_i : vliwProc_regSet
port map (
state => state_s,
reg0 => reg0_s,
reg1 => reg1_s,
reg2 => reg2_s,
reg3 => reg3_s,
reg4 => reg4_s,
reg5 => reg5_s,
reg6 => reg6_s,
reg7 => reg7_s,
port map (
state => state_s,
reg0 => reg0_s,
reg1 => reg1_s,
reg2 => reg2_s,
reg3 => reg3_s,
reg4 => reg4_s,
reg5 => reg5_s,
reg6 => reg6_s,
reg7 => reg7_s,
aluDataIn => aluRegOut_s,
aluRegSel => aluRegSel_s,
aluRegEn_n => aluRegEn_n_s,
427,235 → 413,235
ldstRegSel => ldStRegSel_s,
ldstRegEn_n => ldstRegEn_n_s,
irqEn => statusRegData_s(0),
irqEn => statusRegData_s(0),
rst_n => rst_n_s
);
rst_n => rst_n_s
);
 
statusRegIoEn_n_s <= '0' when state_s(3) = '1' and ioWr_n_s = '0' and ioEn_n_s = '0' and dataAddr_s(7 downto 0) = "00000000" else
'1';
statusRegIoEn_n_s <= '0' when state_s(3) = '1' and ioWr_n_s = '0' and ioEn_n_s = '0' and dataAddr_s(7 downto 0) = "00000000" else
'1';
vliwProc_statusReg_i : vliwProc_statusReg
port map (
state => state_s,
iretEn_n => pcLoad_n_s,
ioEn_n => statusRegIoEn_n_s,
irqEn => irqAck_s,
flagsEn_n => aluRegEn_n_s,
flagsIn => aluFlags_s,
dataIn => dataOut_s,
dataOut => statusRegData_s,
port map (
state => state_s,
rst_n => rst_n_s
);
 
pcReg_ioInEn_n_s <= '0' when ioEn_n_s = '0' and dataAddr_s(7 downto 2) = "000100" else
'1';
pcReg_ioInWr_n_s <= '0' when ioWr_n_s = '0' and pcReg_ioInEn_n_s = '0' else
'1';
vliwProc_pcReg_i : vliwProc_pcReg
port map (
addrOut => instAddr_s,
state => state_s,
stalled_n => stalled_n_s,
ioAddr => dataAddr_s(1 downto 0),
ioIn => dataOut_s,
ioOut => pcReg_ioOut_s,
ioInEn_n => pcReg_ioInEn_n_s,
ioInWr_n => pcReg_ioInWr_n_s,
pcLoad_n => pcLoad_n_s,
jmpIn => jmpAddr_s,
jmpInEn_n => jmpOutEn_n_s,
 
irq => irqAck_s,
irqAddr => irqAddr_s,
rst_n => rst_n_s
);
iretEn_n => pcLoad_n_s,
ioEn_n => statusRegIoEn_n_s,
irqEn => irqAck_s,
flagsEn_n => aluRegEn_n_s,
flagsIn => aluFlags_s,
dataIn => dataOut_s,
dataOut => statusRegData_s,
rst_n => rst_n_s
);
 
pcReg_ioInEn_n_s <= '0' when ioEn_n_s = '0' and dataAddr_s(7 downto 2) = "000100" else
'1';
pcReg_ioInWr_n_s <= '0' when ioWr_n_s = '0' and pcReg_ioInEn_n_s = '0' else
'1';
vliwProc_pcReg_i : vliwProc_pcReg
port map (
addrOut => instAddr_s,
state => state_s,
stalled_n => stalled_n_s,
ioAddr => dataAddr_s(1 downto 0),
ioIn => dataOut_s,
ioOut => pcReg_ioOut_s,
ioInEn_n => pcReg_ioInEn_n_s,
ioInWr_n => pcReg_ioInWr_n_s,
pcLoad_n => pcLoad_n_s,
jmpIn => jmpAddr_s,
jmpInEn_n => jmpOutEn_n_s,
 
irq => irqAck_s,
irqAddr => irqAddr_s,
rst_n => rst_n_s
);
vliwProc_jmpExec_i : vliwProc_jmpExec
port map (
en_n => jmpEn_n_s,
esb => state_s,
dst => jmpDstReg_s,
as => jmpAs_s,
 
jmpDst => jmpAddr_s,
jmpEn_n => jmpOutEn_n_s,
 
cz => statusRegData_s(5 downto 4),
rst_n => rst_n_s
);
 
vliwProc_instDecoder_i : vliwProc_instDecoder
port map (
clk => clk,
esb => state_s,
instData => instDataIn_s,
 
ldstOpCode => ldstOpCode_s,
ldstAs => ldstAs_s,
ldstDstReg => ldstDstReg_s,
ldstSrc => ldstSrc_s,
ldstEn_n => ldstEn_n_s,
 
aluOpCode => aluOpCode_s,
aluAs => aluAs_s,
aluDstReg => aluDstReg_s,
aluSrc => aluSrc_s,
aluEn_n => aluEn_n_s,
 
jmpAs => jmpAs_s,
jmpDstReg => jmpDstReg_s,
jmpEn_n => jmpEn_n_s,
 
stall_n => stall_n_s,
stalled_n => stalled_n_s,
 
rst_n => rst_n_s
);
 
ioMemAddr <= dataAddr_s;
ioMemDataOut <= dataOut_s;
ioDataIn_s <= statusRegData_s when dataAddr_s(7 downto 0) = "00000000" else
irq_ioOut_s when irq_ioInEn_n_s = '0' else
pcReg_ioOut_s when pcReg_ioInEn_n_s = '0' else
ioMemDataIn;
ioMemWr_n <= ioWr_n_s when state_s(3) = '1' else
'1';
ioMemEn_n <= ioEn_n_s;
 
dataMemAddr <= dataAddr_s;
dataMemDataOut <= dataOut_s;
dataIn_s <= dataMemDataIn;
dataMemWr_n <= dataWr_n_s when state_s(3) = '1' else
'1';
dataMemEn_n <= dataEn_n_s;
ioWr_n_s <= ldstIoWrOut_n_s when rst_n_s = '1' and stalled_n_s = '1' else
'1';
ioEn_n_s <= ldstIoEnOut_n_s when rst_n_s = '1' and stalled_n_s = '1' else
'1';
port map (
en_n => jmpEn_n_s,
esb => state_s,
dst => jmpDstReg_s,
as => jmpAs_s,
 
jmpDst => jmpAddr_s,
jmpEn_n => jmpOutEn_n_s,
 
cz => statusRegData_s(5 downto 4),
rst_n => rst_n_s
);
 
vliwProc_instDecoder_i : vliwProc_instDecoder
port map (
clk => clk,
esb => state_s,
instData => instDataIn_s,
 
ldstOpCode => ldstOpCode_s,
ldstAs => ldstAs_s,
ldstDstReg => ldstDstReg_s,
ldstSrc => ldstSrc_s,
ldstEn_n => ldstEn_n_s,
 
aluOpCode => aluOpCode_s,
aluAs => aluAs_s,
aluDstReg => aluDstReg_s,
aluSrc => aluSrc_s,
aluEn_n => aluEn_n_s,
 
jmpAs => jmpAs_s,
jmpDstReg => jmpDstReg_s,
jmpEn_n => jmpEn_n_s,
 
stall_n => stall_n_s,
stalled_n => stalled_n_s,
 
rst_n => rst_n_s
);
 
ioMemAddr <= dataAddr_s;
ioMemDataOut <= dataOut_s;
ioDataIn_s <= statusRegData_s when dataAddr_s(7 downto 0) = "00000000" else
irq_ioOut_s when irq_ioInEn_n_s = '0' else
pcReg_ioOut_s when pcReg_ioInEn_n_s = '0' else
ioMemDataIn;
ioMemWr_n <= ioWr_n_s when state_s(3) = '1' else
'1';
ioMemEn_n <= ioEn_n_s;
 
dataMemAddr <= dataAddr_s;
dataMemDataOut <= dataOut_s;
dataIn_s <= dataMemDataIn;
dataMemWr_n <= dataWr_n_s when state_s(3) = '1' else
'1';
dataMemEn_n <= dataEn_n_s;
ioWr_n_s <= ldstIoWrOut_n_s when rst_n_s = '1' and stalled_n_s = '1' else
'1';
ioEn_n_s <= ldstIoEnOut_n_s when rst_n_s = '1' and stalled_n_s = '1' else
'1';
 
ldstRst_n_s <= rst_n_s and stalled_n_s;
 
vliwProc_loadStore_i : vliwProc_loadStore
vliwProc_loadStore_i : vliwProc_loadStore
port map (
addr => dataAddr_s,
dataIn => dataIn_s,
ioIn => ioDataIn_s,
dataOut => dataOut_s,
 
ioWr_n => ldstIoWrOut_n_s,
ioEn_n => ldstIoEnOut_n_s,
dataWr_n => dataWr_n_s,
dataEn_n => dataEn_n_s,
opCode => ldstOpCode_s,
as => ldstAs_s,
dstReg => ldstDstReg_s,
src => ldstSrc_s,
 
cs_n => ldstEn_n_s,
state => state_s,
regOut => ldStRegOut_s,
 
reg0 => reg0_s,
reg1 => reg1_s,
reg2 => reg2_s,
reg3 => reg3_s,
reg4 => reg4_s,
reg5 => reg5_s,
reg6 => reg6_s,
reg7 => reg7_s,
 
regSel => ldStRegSel_s,
regEn_n => ldStRegEn_n_s,
 
rst_n => ldstRst_n_s
);
 
vliwProc_alu_i : vliwProc_alu
port map (
state => state_s,
 
enable_n => aluEn_n_s,
opcode => aluOpCode_s,
as => aluAs_s,
dstRegIn => aluDstReg_s,
dataIn => aluSrc_s,
 
reg0 => reg0_s,
reg1 => reg1_s,
reg2 => reg2_s,
reg3 => reg3_s,
reg4 => reg4_s,
reg5 => reg5_s,
reg6 => reg6_s,
reg7 => reg7_s,
cIn => statusRegData_s(5),
cOut => aluFlags_s(1),
zOut => aluFlags_s(0),
dstRegEn_n => aluRegEn_n_s,
dstRegOut => aluRegSel_s,
dataOut => aluRegOut_s,
rst_n => rst_n_s
);
 
------------------------------------------------------------------------------------------
--
-- Interrupt handler
--
------------------------------------------------------------------------------------------
irqLine_s <= '0' & irqLine;
irqLineAck <= irqLineAck_s(4 downto 0);
irq_ioInEn_n_s <= '0' when ioEn_n_s = '0' and dataAddr_s(7 downto 0) = "00000001" else
'1';
irq_ioInWr_n_s <= '0' when ioWr_n_s = '0' and irq_ioInEn_n_s = '0' else
'1';
 
addr => dataAddr_s,
dataIn => dataIn_s,
ioIn => ioDataIn_s,
dataOut => dataOut_s,
 
ioWr_n => ldstIoWrOut_n_s,
ioEn_n => ldstIoEnOut_n_s,
dataWr_n => dataWr_n_s,
dataEn_n => dataEn_n_s,
opCode => ldstOpCode_s,
as => ldstAs_s,
dstReg => ldstDstReg_s,
src => ldstSrc_s,
 
cs_n => ldstEn_n_s,
state => state_s,
regOut => ldStRegOut_s,
 
reg0 => reg0_s,
reg1 => reg1_s,
reg2 => reg2_s,
reg3 => reg3_s,
reg4 => reg4_s,
reg5 => reg5_s,
reg6 => reg6_s,
reg7 => reg7_s,
 
regSel => ldStRegSel_s,
regEn_n => ldStRegEn_n_s,
 
rst_n => ldstRst_n_s
);
 
vliwProc_alu_i : vliwProc_alu
port map (
state => state_s,
 
enable_n => aluEn_n_s,
opcode => aluOpCode_s,
as => aluAs_s,
dstRegIn => aluDstReg_s,
dataIn => aluSrc_s,
 
reg0 => reg0_s,
reg1 => reg1_s,
reg2 => reg2_s,
reg3 => reg3_s,
reg4 => reg4_s,
reg5 => reg5_s,
reg6 => reg6_s,
reg7 => reg7_s,
cIn => statusRegData_s(5),
cOut => aluFlags_s(1),
zOut => aluFlags_s(0),
dstRegEn_n => aluRegEn_n_s,
dstRegOut => aluRegSel_s,
dataOut => aluRegOut_s,
rst_n => rst_n_s
);
 
------------------------------------------------------------------------------------------
--
-- Interrupt handler
--
------------------------------------------------------------------------------------------
irqLine_s <= '0' & irqLine;
irqLineAck <= irqLineAck_s(4 downto 0);
irq_ioInEn_n_s <= '0' when ioEn_n_s = '0' and dataAddr_s(7 downto 0) = "00000001" else
'1';
irq_ioInWr_n_s <= '0' when ioWr_n_s = '0' and irq_ioInEn_n_s = '0' else
'1';
 
vliwProc_irqCntl_i : vliwProc_irqCntl
port map (
state => state_s,
stalled_n => stalled_n_s,
 
irqLineIn => irqLine_s,
irqLineOut => irqLineAck_s,
irqAck => irqAck_s,
irqAddr => irqAddr_s,
ioDataIn => dataOut_s,
ioDataOut => irq_ioOut_s,
ioInEn_n => irq_ioInEn_n_s,
ioInWr_n => irq_ioInWr_n_s,
 
enable => statusRegData_s(3),
 
rst_n => rst_n_s
port map (
state => state_s,
stalled_n => stalled_n_s,
 
irqLineIn => irqLine_s,
irqLineOut => irqLineAck_s,
irqAck => irqAck_s,
irqAddr => irqAddr_s,
ioDataIn => dataOut_s,
ioDataOut => irq_ioOut_s,
ioInEn_n => irq_ioInEn_n_s,
ioInWr_n => irq_ioInWr_n_s,
 
enable => statusRegData_s(3),
 
rst_n => rst_n_s
);
end behavior;
end behavior;
/trunk/src/vhdl/proc/regSet.vhd
1,3 → 1,37
-------------------------------------------------------------------------------
--
-- Design: tinyVLIW8 soft-core processor
-- Author: Oliver Stecklina <stecklina@ihp-microelectronics.com>
-- Date: 24.10.2013
-- File: regSet.vhd
--
-------------------------------------------------------------------------------
--
-- Description : This unit is the register set unit of the 8-bit tinyVLIW8
-- vliw processor.
--
-------------------------------------------------------------------------------
--
-- Copyright (C) 2015 IHP GmbH, Frankfurt (Oder), Germany
--
-- This code is free software. It is licensed under the EUPL, Version 1.1
-- or - as soon they will be approved by the European Commission - subsequent
-- versions of the EUPL (the "License").
-- You may redistribute this code and/or modify it under the terms of this
-- License.
-- You may not use this work except in compliance with the License.
-- You may obtain a copy of the License at:
--
-- http://joinup.ec.europa.eu/software/page/eupl/licence-eupl
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" basis,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-------------------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
35,6 → 69,8
signal irqReg1_s : std_logic_vector(7 downto 0);
signal irqReg2_s : std_logic_vector(7 downto 0);
signal irqReg3_s : std_logic_vector(7 downto 0);
signal irqReg4_s : std_logic_vector(7 downto 0);
signal irqReg5_s : std_logic_vector(7 downto 0);
 
signal reg0_s : std_logic_vector(7 downto 0);
signal reg1_s : std_logic_vector(7 downto 0);
105,6 → 141,8
irqReg1_s <= (others => '0');
irqReg2_s <= (others => '0');
irqReg3_s <= (others => '0');
irqReg4_s <= (others => '0');
irqReg5_s <= (others => '0');
 
reg0_s <= (others => '0');
reg1_s <= (others => '0');
141,9 → 179,17
reg3_s <= aluRegData_s;
end if;
elsif (aluRegSel_s = "100") then
reg4_s <= aluRegData_s;
if (irqEn_s = '1') then
irqReg4_s <= aluRegData_s;
else
reg4_s <= aluRegData_s;
end if;
elsif (aluRegSel_s = "101") then
reg5_s <= aluRegData_s;
if (irqEn_s = '1') then
irqReg5_s <= aluRegData_s;
else
reg5_s <= aluRegData_s;
end if;
elsif (aluRegSel_s = "110") then
reg6_s <= aluRegData_s;
elsif (aluRegSel_s = "111") then
177,9 → 223,17
reg3_s <= ldstRegData_s;
end if;
elsif (ldstRegSel_s = "100") then
reg4_s <= ldstRegData_s;
if (irqEn_s = '1') then
irqReg4_s <= ldstRegData_s;
else
reg4_s <= ldstRegData_s;
end if;
elsif (ldstRegSel_s = "101") then
reg5_s <= ldstRegData_s;
if (irqEn_s = '1') then
irqReg5_s <= ldstRegData_s;
else
reg5_s <= ldstRegData_s;
end if;
elsif (ldstRegSel_s = "110") then
reg6_s <= ldstRegData_s;
elsif (ldstRegSel_s = "111") then
211,8 → 265,10
reg2_s;
reg3 <= irqReg3_s when irqEn_s = '1' else
reg3_s;
reg4 <= reg4_s;
reg5 <= reg5_s;
reg4 <= irqReg4_s when irqEn_s = '1' else
reg4_s;
reg5 <= irqReg5_s when irqEn_s = '1' else
reg5_s;
reg6 <= reg6_s;
reg7 <= reg7_s;
 
/trunk/src/vhdl/proc/irqCntl.vhd
12,11 → 12,11
irqAck : out std_logic;
 
irqAddr : out std_logic_vector(1 downto 0);
ioDataIn : in std_logic_vector(7 downto 0);
ioDataOut : out std_logic_vector(7 downto 0);
ioInEn_n : in std_logic;
ioInWr_n : in std_logic;
ioDataIn : in std_logic_vector(7 downto 0);
ioDataOut : out std_logic_vector(7 downto 0);
ioInEn_n : in std_logic;
ioInWr_n : in std_logic;
 
enable : in std_logic;
29,96 → 29,96
 
signal irq_s : std_logic;
signal irqAck_s : std_logic;
signal irqAddr_s : std_logic_vector(1 downto 0);
signal irqAddr_s : std_logic_vector(1 downto 0);
signal irqLineOut_s : std_logic_vector(3 downto 0);
signal irqLineOut_s : std_logic_vector(3 downto 0);
signal irqLineIn_s : std_logic_vector(3 downto 0);
signal irqLine_s : std_logic;
signal irqUpd_s : std_logic;
signal irqCtrl_r : std_logic_vector(7 downto 0);
signal irqCtrl_r : std_logic_vector(7 downto 0);
begin
 
------------------------------------------------------------------------------------------
--
-- IRQ line multiplexer
--
------------------------------------------------------------------------------------------
 
irqLineIn_s(0) <= '1' when rst_n = '1' and ((irqCtrl_r(1 downto 0) = "01" and irqLineIn(0) = '1') or
(irqCtrl_r(1 downto 0) = "10" and irqLineIn(2) = '1') or
(irqCtrl_r(1 downto 0) = "11" and irqLineIn(5) = '1')) else
'0';
irqLineIn_s(1) <= '1' when rst_n = '1' and ((irqCtrl_r(3 downto 2) = "01" and irqLineIn(4) = '1') or
(irqCtrl_r(3 downto 2) = "10" and irqLineIn(0) = '1') or
(irqCtrl_r(3 downto 2) = "11" and irqLineIn(3) = '1')) else
'0';
irqLineIn_s(2) <= '1' when rst_n = '1' and ((irqCtrl_r(5 downto 4) = "01" and irqLineIn(1) = '1') or
(irqCtrl_r(5 downto 4) = "10" and irqLineIn(4) = '1') or
(irqCtrl_r(5 downto 4) = "11" and irqLineIn(5) = '1')) else
'0';
irqLineIn_s(3) <= '1' when rst_n = '1' and ((irqCtrl_r(7 downto 6) = "01" and irqLineIn(1) = '1') or
(irqCtrl_r(7 downto 6) = "10" and irqLineIn(2) = '1') or
(irqCtrl_r(7 downto 6) = "11" and irqLineIn(3) = '1')) else
'0';
irqLineOut(0) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(1 downto 0) = "01" and irqLineOut_s(0) = '1') or
(irqCtrl_r(3 downto 2) = "10" and irqLineOut_s(1) = '1')) else
'0';
irqLineOut(1) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(5 downto 4) = "01" and irqLineOut_s(2) = '1') or
(irqCtrl_r(7 downto 6) = "01" and irqLineOut_s(3) = '1')) else
'0';
irqLineOut(2) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(1 downto 0) = "10" and irqLineOut_s(0) = '1') or
(irqCtrl_r(7 downto 6) = "10" and irqLineOut_s(3) = '1')) else
'0';
irqLineOut(3) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(3 downto 2) = "11" and irqLineOut_s(1) = '1') or
(irqCtrl_r(7 downto 6) = "11" and irqLineOut_s(3) = '1')) else
'0';
irqLineOut(4) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(3 downto 2) = "01" and irqLineOut_s(1) = '1') or
(irqCtrl_r(5 downto 4) = "10" and irqLineOut_s(2) = '1')) else
'0';
irqLineOut(5) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(1 downto 0) = "11" and irqLineOut_s(0) = '1') or
(irqCtrl_r(5 downto 4) = "11" and irqLineOut_s(2) = '1')) else
'0';
------------------------------------------------------------------------------------------
--
-- Control register
--
------------------------------------------------------------------------------------------
 
ioDataOut <= irqCtrl_r when rst_n = '1' and ioInEn_n = '0' else
(others => '0');
------------------------------------------------------------------------------------------
--
-- IRQ line multiplexer
--
------------------------------------------------------------------------------------------
 
irqLineIn_s(0) <= '1' when rst_n = '1' and ((irqCtrl_r(1 downto 0) = "01" and irqLineIn(0) = '1') or
(irqCtrl_r(1 downto 0) = "10" and irqLineIn(2) = '1') or
(irqCtrl_r(1 downto 0) = "11" and irqLineIn(5) = '1')) else
'0';
irqLineIn_s(1) <= '1' when rst_n = '1' and ((irqCtrl_r(3 downto 2) = "01" and irqLineIn(4) = '1') or
(irqCtrl_r(3 downto 2) = "10" and irqLineIn(0) = '1') or
(irqCtrl_r(3 downto 2) = "11" and irqLineIn(3) = '1')) else
'0';
irqLineIn_s(2) <= '1' when rst_n = '1' and ((irqCtrl_r(5 downto 4) = "01" and irqLineIn(1) = '1') or
(irqCtrl_r(5 downto 4) = "10" and irqLineIn(4) = '1') or
(irqCtrl_r(5 downto 4) = "11" and irqLineIn(5) = '1')) else
'0';
irqLineIn_s(3) <= '1' when rst_n = '1' and ((irqCtrl_r(7 downto 6) = "01" and irqLineIn(1) = '1') or
(irqCtrl_r(7 downto 6) = "10" and irqLineIn(2) = '1') or
(irqCtrl_r(7 downto 6) = "11" and irqLineIn(3) = '1')) else
'0';
irqLineOut(0) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(1 downto 0) = "01" and irqLineOut_s(0) = '1') or
(irqCtrl_r(3 downto 2) = "10" and irqLineOut_s(1) = '1')) else
'0';
irqLineOut(1) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(5 downto 4) = "01" and irqLineOut_s(2) = '1') or
(irqCtrl_r(7 downto 6) = "01" and irqLineOut_s(3) = '1')) else
'0';
irqLineOut(2) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(1 downto 0) = "10" and irqLineOut_s(0) = '1') or
(irqCtrl_r(7 downto 6) = "10" and irqLineOut_s(3) = '1')) else
'0';
irqLineOut(3) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(3 downto 2) = "11" and irqLineOut_s(1) = '1') or
(irqCtrl_r(7 downto 6) = "11" and irqLineOut_s(3) = '1')) else
'0';
irqLineOut(4) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(3 downto 2) = "01" and irqLineOut_s(1) = '1') or
(irqCtrl_r(5 downto 4) = "10" and irqLineOut_s(2) = '1')) else
'0';
irqLineOut(5) <= '1' when rst_n = '1' and enable = '1' and irq_s = '1' and
((irqCtrl_r(1 downto 0) = "11" and irqLineOut_s(0) = '1') or
(irqCtrl_r(5 downto 4) = "11" and irqLineOut_s(2) = '1')) else
'0';
------------------------------------------------------------------------------------------
--
-- Control register
--
------------------------------------------------------------------------------------------
 
ioDataOut <= irqCtrl_r when rst_n = '1' and ioInEn_n = '0' else
(others => '0');
update_irqCtrlReg: process(rst_n, ioInWr_n)
begin
if (rst_n = '0') then
if (rst_n = '0') then
irqCtrl_r <= (others => '0');
else
if (ioInWr_n'event and ioInWr_n = '0') then
if (ioInEn_n = '0') then
irqCtrl_r <= ioDataIn;
end if;
end if;
end if;
else
if (ioInWr_n'event and ioInWr_n = '0') then
if (ioInEn_n = '0') then
irqCtrl_r <= ioDataIn;
end if;
end if;
end if;
end process;
 
------------------------------------------------------------------------------------------
--
-- IRQ address generation
--
------------------------------------------------------------------------------------------
 
------------------------------------------------------------------------------------------
--
-- IRQ address generation
--
------------------------------------------------------------------------------------------
 
irqAddr <= irqAddr_s;
irq_proc : process(rst_n, irqUpd_s)
begin
if (rst_n = '0') then
127,7 → 127,7
irqAddr_s <= (others => '0');
irqLineOut_s <= (others => '0');
else
if (irqUpd_s'event and irqUpd_s = '1') then
if (irqUpd_s'event and irqUpd_s = '0') then
if (irqLine_s = '1') then
irq_s <= '1';
154,9 → 154,9
irqLine_s <= irqLineIn_s(0) or irqLineIn_s(1) or irqLineIn_s(2) or irqLineIn_s(3);
irqUpd_s <= state(2) when enable = '1' and stalled_n = '1' else
'1' when enable = '1' and irqLine_s = '1' else
'0';
irqUpd_s <= state(3) when enable = '1' and stalled_n = '1' else
'0' when enable = '1' and irqLine_s = '1' else
'1';
irqAck <= irq_s;
 
/trunk/src/vhdl/sysArch.vhd
1,3 → 1,37
-------------------------------------------------------------------------------
--
-- Design: tinyVLIW8 soft-core processor
-- Author: Oliver Stecklina <stecklina@ihp-microelectronics.com>
-- Date: 24.10.2013
-- File: sysArch.vhd
--
-------------------------------------------------------------------------------
--
-- Description : TinyVLIW8 system architecture includes processor core and
-- GPIO, timer, and SPI periperals
--
-------------------------------------------------------------------------------
--
-- Copyright (C) 2015 IHP GmbH, Frankfurt (Oder), Germany
--
-- This code is free software. It is licensed under the EUPL, Version 1.1
-- or - as soon they will be approved by the European Commission - subsequent
-- versions of the EUPL (the "License").
-- You may redistribute this code and/or modify it under the terms of this
-- License.
-- You may not use this work except in compliance with the License.
-- You may obtain a copy of the License at:
--
-- http://joinup.ec.europa.eu/software/page/eupl/licence-eupl
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" basis,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-------------------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
25,7 → 59,7
ioWrEn_n : out std_logic;
ioRdEn_n : out std_logic;
-- interrupt handling
-- external interrupt handling
irqLine : in std_logic;
irqLineAck : out std_logic;
 
50,39 → 84,25
architecture behavior of sysArch is
 
component SPImaster IS
PORT (
inclk : IN STD_LOGIC; -- system clock
rst_n : IN STD_LOGIC; -- synchr. system reset, high active
-- processor interface
we_n : IN STD_LOGIC; -- write enable, high active
re_n : IN STD_LOGIC; -- read enable, high active
addr : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -- address from processor
din : IN STD_LOGIC_VECTOR(7 DOWNTO 0);-- data from processor
dout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-- async. data to processor
intr : OUT STD_LOGIC; -- interrupt to processor, high active
intra : IN STD_LOGIC; -- interrupt to processor, high active
-- SPI interface
SCK : OUT STD_LOGIC; -- SPI clock
SS : OUT STD_LOGIC; -- SPI slave select, active level configurable
MOSI : OUT STD_LOGIC; -- SPI master output, slave input
MISO : IN STD_LOGIC -- SPI master input, slave output
);
PORT (
inclk : IN STD_LOGIC; -- system clock
rst_n : IN STD_LOGIC; -- synchr. system reset, high active
-- processor interface
we_n : IN STD_LOGIC; -- write enable, high active
re_n : IN STD_LOGIC; -- read enable, high active
addr : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -- address from processor
din : IN STD_LOGIC_VECTOR(7 DOWNTO 0);-- data from processor
dout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-- async. data to processor
intr : OUT STD_LOGIC; -- interrupt to processor, high active
intra : IN STD_LOGIC; -- interrupt to processor, high active
-- SPI interface
SCK : OUT STD_LOGIC; -- SPI clock
SS : OUT STD_LOGIC; -- SPI slave select, active level configurable
MOSI : OUT STD_LOGIC; -- SPI master output, slave input
MISO : IN STD_LOGIC -- SPI master input, slave output
);
END component;
 
component sha1_ex
PORT(
resetn : IN STD_LOGIC; -- reset the module (low active)
clk : IN STD_LOGIC; -- clock of the sha1
cen : IN STD_LOGIC; -- IO select low active
wen : in std_logic; --- write enable low active
addr : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -- address signal
d_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- data
intr : OUT STD_LOGIC; -- signalizes if generation finished
intra : IN STD_LOGIC; -- signalizes if generation finished
d_out : out STD_LOGIC_VECTOR(7 DOWNTO 0) -- data
);
end component;
 
component vliwProc
port (
clk : in std_logic;
116,26 → 136,26
 
component ioport
port (
cs_n : IN STD_LOGIC; -- chip select signal
cs_n : IN STD_LOGIC; -- chip select signal
 
clk : IN STD_LOGIC;
clk : IN STD_LOGIC;
 
-- memory interface
mdbwr_n : IN STD_LOGIC; -- write enable signal
mdb_i : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- data from data bus
mdb_o : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- data to data bus
mab : IN STD_LOGIC_VECTOR(2 downto 0); -- address registers
irq : out std_logic;
irqAck : in std_logic;
-- port interface
PnIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- data from pad (gpio in)
PnOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- data to pad (gpio out)
PnOEN : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- port direction (low active)
-- memory interface
mdbwr_n : IN STD_LOGIC; -- write enable signal
mdb_i : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- data from data bus
mdb_o : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- data to data bus
mab : IN STD_LOGIC_VECTOR(2 downto 0); -- address registers
 
rst_n : IN STD_LOGIC
);
irq : out std_logic;
irqAck : in std_logic;
 
-- port interface
PnIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- data from pad (gpio in)
PnOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- data to pad (gpio out)
PnOEN : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- port direction (low active)
rst_n : IN STD_LOGIC
);
end component;
 
component timer
200,16 → 220,10
signal spiIrq_s : std_logic;
signal ioDataSpi_s : std_logic_vector(7 downto 0);
 
-- sha1 signals
signal ioSha1En_n_s : std_logic;
signal sha1Irq_s : std_logic;
signal ioDataSha1_s : std_logic_vector(7 downto 0);
 
-- external io interface
signal ioDataExt_s : std_logic_vector(7 downto 0);
signal ioExtEn_n_s : std_logic;
 
 
begin
 
clk_s <= clk;
221,7 → 235,7
irqLineAck <= irqLineAck_s(0); -- export IRQ 0
irqLine_s <= ioPortIrq_s & timer_irq_s & sha1Irq_s & spiIrq_s & irqLine;
irqLine_s <= ioPortIrq_s & timer_irq_s & '0' & spiIrq_s & irqLine;
instMemAddr <= instAddr_s;
instDataIn_s <= instMemDataIn;
235,9 → 249,8
ioDataIn_s <= ioDataGpio_s when ioPortEn_n_s = '0' else
ioTimerDataOut_s when ioTimerEn_n_s = '0' else
ioDataSpi_s when ioSpiEn_n_s = '0' else
ioDataSha1_s when ioSha1En_n_s = '0' else
ioDataExt_s;
ioDataSpi_s when ioSpiEn_n_s = '0' else
ioDataExt_s;
vliwProc_i : vliwProc
port map (
274,7 → 287,7
spiMaster_i : SPImaster
port map (
inclk => clk_s,
rst_n => rst_n_s,
rst_n => rst_n_s,
 
we_n => ioWr_n_s,
re_n => ioSpiEn_n_s,
282,7 → 295,7
din => ioDataOut_s,
dout => ioDataSpi_s,
intr => spiIrq_s,
intr => spiIrq_s,
intra => irqLineAck_s(1),
 
SCK => spi_clk,
291,44 → 304,28
MISO => spi_miso
);
ioSha1En_n_s <= ioEn_n_s when ioAddr_s(7 downto 2) = "000111" else
'1';
 
sha1_i : sha1_ex
port map (
resetn => rst_n_s,
clk => clk_s,
cen => ioSha1En_n_s,
wen => ioWr_n_s,
addr => ioAddr_s(1 downto 0),
d_in => ioDataOut_s,
intr => sha1Irq_s,
intra => irqLineAck_s(2),
d_out => ioDataSha1_s
);
 
ioPortEn_n_s <= ioEn_n_s when ioAddr_s(7 downto 3) = "00100" else
'1';
 
ioport_i : ioport
port map (
cs_n => ioPortEn_n_s,
clk => clk_s,
cs_n => ioPortEn_n_s,
clk => clk_s,
 
mdbwr_n => ioWr_n_s,
mdb_i => ioDataOut_s,
mdb_o => ioDataGpio_s,
mdbwr_n => ioWr_n_s,
mdb_i => ioDataOut_s,
mdb_o => ioDataGpio_s,
mab => ioAddr_s(2 downto 0),
irq => ioPortIrq_s,
irqAck => irqLineAck_s(4),
irq => ioPortIrq_s,
irqAck => irqLineAck_s(4),
-- port interface
PnIN => gpio_in,
PnOUT => gpio_out,
PnOEN => gpio_dir,
PnIN => gpio_in,
PnOUT => gpio_out,
PnOEN => gpio_dir,
 
rst_n => rst_n_s
rst_n => rst_n_s
);
 
ioTimerEn_n_s <= ioEn_n_s when ioAddr_s(7 downto 3) = "00101" else
353,10 → 350,10
);
 
-- external io interface
ioAddr <= ioAddr_s;
ioDataOut <= ioDataOut_s;
ioAddr <= ioAddr_s;
ioDataOut <= ioDataOut_s;
ioDataExt_s <= ioDataIn;
ioRdEn_n <= ioEn_n_s;
ioWrEn_n <= ioWr_n_s;
ioRdEn_n <= ioEn_n_s;
ioWrEn_n <= ioWr_n_s;
 
end behavior;
/trunk/design/AlteraDK1/AlteraDK1.qsf
41,7 → 41,7
set_global_assignment -name TOP_LEVEL_ENTITY AlteraDK1
set_global_assignment -name ORIGINAL_QUARTUS_VERSION "11.0 SP1"
set_global_assignment -name PROJECT_CREATION_TIME_DATE "15:41:59 FEBRUARY 24, 2014"
set_global_assignment -name LAST_QUARTUS_VERSION "11.0 SP1"
set_global_assignment -name LAST_QUARTUS_VERSION "11.1 SP2"
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
186,26 → 186,32
set_location_assignment PIN_L22 -to sw[0]
set_location_assignment PIN_F14 -to uart0_rxd
set_location_assignment PIN_G12 -to uart0_txd
set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE BALANCED
set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE BALANCED
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
set_global_assignment -name VHDL_FILE ../../source/vhdl/vliwProc/vliwProc.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/vliwProc/statusReg.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/vliwProc/regSet.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/vliwProc/pcReg.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/vliwProc/loadStore.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/vliwProc/jmpExec.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/vliwProc/irqCntl.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/vliwProc/instDecoder.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/vliwProc/alu.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/timer.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/spiSlave.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/ioport.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/gendelay.vhd
set_global_assignment -name VHDL_FILE ../../source/vhdl/clock_divider.vhd
set_global_assignment -name VHDL_FILE AlteraDK1.vhd
set_global_assignment -name QIP_FILE dataMem.qip
set_global_assignment -name QIP_FILE instMem.qip
set_global_assignment -name SDC_FILE AlteraDK1.sdc
set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA
set_global_assignment -name DEVICE_FILTER_PIN_COUNT 484
set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 7
set_global_assignment -name VHDL_FILE AlteraDK1.vhd
set_global_assignment -name QIP_FILE dataMem.qip
set_global_assignment -name QIP_FILE instMem.qip
set_global_assignment -name SDC_FILE AlteraDK1.sdc
set_global_assignment -name VHDL_FILE ../../src/vhdl/proc/vliwProc.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/proc/statusReg.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/proc/regSet.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/proc/pcReg.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/proc/loadStore.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/proc/jmpExec.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/proc/irqCntl.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/proc/instDecoder.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/proc/alu.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/library/latch.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/timer.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/spiSlave.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/spiMaster.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/rstCtrl.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/ioport.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/gendelay.vhd
set_global_assignment -name VHDL_FILE ../../src/vhdl/clock_divider.vhd
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
/trunk/design/AlteraDK1/dataMem.qip
1,5 → 1,5
set_global_assignment -name IP_TOOL_NAME "RAM: 1-PORT"
set_global_assignment -name IP_TOOL_VERSION "11.0"
set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "dataMem.vhd"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "dataMem_inst.vhd"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "dataMem.cmp"]
set_global_assignment -name IP_TOOL_NAME "RAM: 1-PORT"
set_global_assignment -name IP_TOOL_VERSION "11.1"
set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "dataMem.vhd"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "dataMem_inst.vhd"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "dataMem.cmp"]
/trunk/design/AlteraDK1/instMem.qip
1,5 → 1,5
set_global_assignment -name IP_TOOL_NAME "RAM: 1-PORT"
set_global_assignment -name IP_TOOL_VERSION "11.0"
set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "instMem.vhd"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "instMem_inst.vhd"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "instMem.cmp"]
set_global_assignment -name IP_TOOL_NAME "RAM: 1-PORT"
set_global_assignment -name IP_TOOL_VERSION "11.1"
set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "instMem.vhd"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "instMem_inst.vhd"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "instMem.cmp"]
/trunk/design/AlteraDK1/dataMem_inst.vhd
1,8 → 1,8
dataMem_inst : dataMem PORT MAP (
address => address_sig,
data => data_sig,
inclock => inclock_sig,
outclock => outclock_sig,
wren => wren_sig,
q => q_sig
);
dataMem_inst : dataMem PORT MAP (
address => address_sig,
data => data_sig,
inclock => inclock_sig,
outclock => outclock_sig,
wren => wren_sig,
q => q_sig
);
/trunk/design/AlteraDK1/dataMem.cmp
1,26 → 1,26
--Copyright (C) 1991-2011 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Altera Program License
--Subscription Agreement, Altera MegaCore Function License
--Agreement, or other applicable license agreement, including,
--without limitation, that your use is for the sole purpose of
--programming logic devices manufactured by Altera and sold by
--Altera or its authorized distributors. Please refer to the
--applicable agreement for further details.
 
 
component dataMem
PORT
(
address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
outclock : IN STD_LOGIC ;
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
end component;
--Copyright (C) 1991-2011 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Altera Program License
--Subscription Agreement, Altera MegaCore Function License
--Agreement, or other applicable license agreement, including,
--without limitation, that your use is for the sole purpose of
--programming logic devices manufactured by Altera and sold by
--Altera or its authorized distributors. Please refer to the
--applicable agreement for further details.
 
 
component dataMem
PORT
(
address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
outclock : IN STD_LOGIC ;
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
end component;
/trunk/design/AlteraDK1/dataMem.vhd
1,183 → 1,183
-- megafunction wizard: %RAM: 1-PORT%
-- GENERATION: STANDARD
-- VERSION: WM1.0
-- MODULE: altsyncram
 
-- ============================================================
-- File Name: dataMem.vhd
-- Megafunction Name(s):
-- altsyncram
--
-- Simulation Library Files(s):
-- altera_mf
-- ============================================================
-- ************************************************************
-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
--
-- 11.0 Build 208 07/03/2011 SP 1 SJ Web Edition
-- ************************************************************
 
 
--Copyright (C) 1991-2011 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Altera Program License
--Subscription Agreement, Altera MegaCore Function License
--Agreement, or other applicable license agreement, including,
--without limitation, that your use is for the sole purpose of
--programming logic devices manufactured by Altera and sold by
--Altera or its authorized distributors. Please refer to the
--applicable agreement for further details.
 
 
LIBRARY ieee;
USE ieee.std_logic_1164.all;
 
LIBRARY altera_mf;
USE altera_mf.all;
 
ENTITY dataMem IS
PORT
(
address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
outclock : IN STD_LOGIC ;
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END dataMem;
 
 
ARCHITECTURE SYN OF datamem IS
 
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);
 
 
 
COMPONENT altsyncram
GENERIC (
clock_enable_input_a : STRING;
clock_enable_output_a : STRING;
intended_device_family : STRING;
lpm_type : STRING;
numwords_a : NATURAL;
operation_mode : STRING;
outdata_aclr_a : STRING;
outdata_reg_a : STRING;
power_up_uninitialized : STRING;
widthad_a : NATURAL;
width_a : NATURAL;
width_byteena_a : NATURAL
);
PORT (
address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
clock0 : IN STD_LOGIC ;
data_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
wren_a : IN STD_LOGIC ;
clock1 : IN STD_LOGIC ;
q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END COMPONENT;
 
BEGIN
q <= sub_wire0(7 DOWNTO 0);
 
altsyncram_component : altsyncram
GENERIC MAP (
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
intended_device_family => "Cyclone II",
lpm_type => "altsyncram",
numwords_a => 256,
operation_mode => "SINGLE_PORT",
outdata_aclr_a => "NONE",
outdata_reg_a => "CLOCK1",
power_up_uninitialized => "FALSE",
widthad_a => 8,
width_a => 8,
width_byteena_a => 1
)
PORT MAP (
address_a => address,
clock0 => inclock,
data_a => data,
wren_a => wren,
clock1 => outclock,
q_a => sub_wire0
);
 
 
 
END SYN;
 
-- ============================================================
-- CNX file retrieval info
-- ============================================================
-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
-- Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
-- Retrieval info: PRIVATE: AclrByte NUMERIC "0"
-- Retrieval info: PRIVATE: AclrData NUMERIC "0"
-- Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: Clken NUMERIC "0"
-- Retrieval info: PRIVATE: DataBusSeparated NUMERIC "1"
-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
-- Retrieval info: PRIVATE: MIFfilename STRING ""
-- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "256"
-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
-- Retrieval info: PRIVATE: RegAddr NUMERIC "1"
-- Retrieval info: PRIVATE: RegData NUMERIC "1"
-- Retrieval info: PRIVATE: RegOutput NUMERIC "1"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-- Retrieval info: PRIVATE: SingleClock NUMERIC "0"
-- Retrieval info: PRIVATE: UseDQRAM NUMERIC "1"
-- Retrieval info: PRIVATE: WRCONTROL_ACLR_A NUMERIC "0"
-- Retrieval info: PRIVATE: WidthAddr NUMERIC "8"
-- Retrieval info: PRIVATE: WidthData NUMERIC "8"
-- Retrieval info: PRIVATE: rden NUMERIC "0"
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "256"
-- Retrieval info: CONSTANT: OPERATION_MODE STRING "SINGLE_PORT"
-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK1"
-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "8"
-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8"
-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
-- Retrieval info: USED_PORT: address 0 0 8 0 INPUT NODEFVAL "address[7..0]"
-- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL "data[7..0]"
-- Retrieval info: USED_PORT: inclock 0 0 0 0 INPUT VCC "inclock"
-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT NODEFVAL "outclock"
-- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]"
-- Retrieval info: USED_PORT: wren 0 0 0 0 INPUT NODEFVAL "wren"
-- Retrieval info: CONNECT: @address_a 0 0 8 0 address 0 0 8 0
-- Retrieval info: CONNECT: @clock0 0 0 0 0 inclock 0 0 0 0
-- Retrieval info: CONNECT: @clock1 0 0 0 0 outclock 0 0 0 0
-- Retrieval info: CONNECT: @data_a 0 0 8 0 data 0 0 8 0
-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
-- Retrieval info: CONNECT: q 0 0 8 0 @q_a 0 0 8 0
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem.vhd TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem.inc FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem.cmp TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem.bsf FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem_inst.vhd TRUE
-- Retrieval info: LIB_FILE: altera_mf
-- megafunction wizard: %RAM: 1-PORT%
-- GENERATION: STANDARD
-- VERSION: WM1.0
-- MODULE: altsyncram
 
-- ============================================================
-- File Name: dataMem.vhd
-- Megafunction Name(s):
-- altsyncram
--
-- Simulation Library Files(s):
-- altera_mf
-- ============================================================
-- ************************************************************
-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
--
-- 11.1 Build 259 01/25/2012 SP 2 SJ Web Edition
-- ************************************************************
 
 
--Copyright (C) 1991-2011 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Altera Program License
--Subscription Agreement, Altera MegaCore Function License
--Agreement, or other applicable license agreement, including,
--without limitation, that your use is for the sole purpose of
--programming logic devices manufactured by Altera and sold by
--Altera or its authorized distributors. Please refer to the
--applicable agreement for further details.
 
 
LIBRARY ieee;
USE ieee.std_logic_1164.all;
 
LIBRARY altera_mf;
USE altera_mf.all;
 
ENTITY dataMem IS
PORT
(
address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
outclock : IN STD_LOGIC ;
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END dataMem;
 
 
ARCHITECTURE SYN OF datamem IS
 
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);
 
 
 
COMPONENT altsyncram
GENERIC (
clock_enable_input_a : STRING;
clock_enable_output_a : STRING;
intended_device_family : STRING;
lpm_type : STRING;
numwords_a : NATURAL;
operation_mode : STRING;
outdata_aclr_a : STRING;
outdata_reg_a : STRING;
power_up_uninitialized : STRING;
widthad_a : NATURAL;
width_a : NATURAL;
width_byteena_a : NATURAL
);
PORT (
address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
clock0 : IN STD_LOGIC ;
data_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
wren_a : IN STD_LOGIC ;
clock1 : IN STD_LOGIC ;
q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END COMPONENT;
 
BEGIN
q <= sub_wire0(7 DOWNTO 0);
 
altsyncram_component : altsyncram
GENERIC MAP (
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
intended_device_family => "Cyclone II",
lpm_type => "altsyncram",
numwords_a => 256,
operation_mode => "SINGLE_PORT",
outdata_aclr_a => "NONE",
outdata_reg_a => "CLOCK1",
power_up_uninitialized => "FALSE",
widthad_a => 8,
width_a => 8,
width_byteena_a => 1
)
PORT MAP (
address_a => address,
clock0 => inclock,
data_a => data,
wren_a => wren,
clock1 => outclock,
q_a => sub_wire0
);
 
 
 
END SYN;
 
-- ============================================================
-- CNX file retrieval info
-- ============================================================
-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
-- Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
-- Retrieval info: PRIVATE: AclrByte NUMERIC "0"
-- Retrieval info: PRIVATE: AclrData NUMERIC "0"
-- Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: Clken NUMERIC "0"
-- Retrieval info: PRIVATE: DataBusSeparated NUMERIC "1"
-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
-- Retrieval info: PRIVATE: MIFfilename STRING ""
-- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "256"
-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
-- Retrieval info: PRIVATE: RegAddr NUMERIC "1"
-- Retrieval info: PRIVATE: RegData NUMERIC "1"
-- Retrieval info: PRIVATE: RegOutput NUMERIC "1"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-- Retrieval info: PRIVATE: SingleClock NUMERIC "0"
-- Retrieval info: PRIVATE: UseDQRAM NUMERIC "1"
-- Retrieval info: PRIVATE: WRCONTROL_ACLR_A NUMERIC "0"
-- Retrieval info: PRIVATE: WidthAddr NUMERIC "8"
-- Retrieval info: PRIVATE: WidthData NUMERIC "8"
-- Retrieval info: PRIVATE: rden NUMERIC "0"
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "256"
-- Retrieval info: CONSTANT: OPERATION_MODE STRING "SINGLE_PORT"
-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK1"
-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "8"
-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8"
-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
-- Retrieval info: USED_PORT: address 0 0 8 0 INPUT NODEFVAL "address[7..0]"
-- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL "data[7..0]"
-- Retrieval info: USED_PORT: inclock 0 0 0 0 INPUT VCC "inclock"
-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT NODEFVAL "outclock"
-- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]"
-- Retrieval info: USED_PORT: wren 0 0 0 0 INPUT NODEFVAL "wren"
-- Retrieval info: CONNECT: @address_a 0 0 8 0 address 0 0 8 0
-- Retrieval info: CONNECT: @clock0 0 0 0 0 inclock 0 0 0 0
-- Retrieval info: CONNECT: @clock1 0 0 0 0 outclock 0 0 0 0
-- Retrieval info: CONNECT: @data_a 0 0 8 0 data 0 0 8 0
-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
-- Retrieval info: CONNECT: q 0 0 8 0 @q_a 0 0 8 0
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem.vhd TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem.inc FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem.cmp TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem.bsf FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL dataMem_inst.vhd TRUE
-- Retrieval info: LIB_FILE: altera_mf
/trunk/design/AlteraDK1/instMem_inst.vhd
1,8 → 1,8
instMem_inst : instMem PORT MAP (
address => address_sig,
data => data_sig,
inclock => inclock_sig,
outclock => outclock_sig,
wren => wren_sig,
q => q_sig
);
instMem_inst : instMem PORT MAP (
address => address_sig,
data => data_sig,
inclock => inclock_sig,
outclock => outclock_sig,
wren => wren_sig,
q => q_sig
);
/trunk/design/AlteraDK1/instMem.cmp
1,26 → 1,26
--Copyright (C) 1991-2011 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Altera Program License
--Subscription Agreement, Altera MegaCore Function License
--Agreement, or other applicable license agreement, including,
--without limitation, that your use is for the sole purpose of
--programming logic devices manufactured by Altera and sold by
--Altera or its authorized distributors. Please refer to the
--applicable agreement for further details.
 
 
component instMem
PORT
(
address : IN STD_LOGIC_VECTOR (10 DOWNTO 0);
data : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
outclock : IN STD_LOGIC ;
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
);
end component;
--Copyright (C) 1991-2011 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Altera Program License
--Subscription Agreement, Altera MegaCore Function License
--Agreement, or other applicable license agreement, including,
--without limitation, that your use is for the sole purpose of
--programming logic devices manufactured by Altera and sold by
--Altera or its authorized distributors. Please refer to the
--applicable agreement for further details.
 
 
component instMem
PORT
(
address : IN STD_LOGIC_VECTOR (10 DOWNTO 0);
data : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
outclock : IN STD_LOGIC ;
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
);
end component;
/trunk/design/AlteraDK1/instMem.vhd
1,183 → 1,183
-- megafunction wizard: %RAM: 1-PORT%
-- GENERATION: STANDARD
-- VERSION: WM1.0
-- MODULE: altsyncram
 
-- ============================================================
-- File Name: instMem.vhd
-- Megafunction Name(s):
-- altsyncram
--
-- Simulation Library Files(s):
-- altera_mf
-- ============================================================
-- ************************************************************
-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
--
-- 11.0 Build 208 07/03/2011 SP 1 SJ Web Edition
-- ************************************************************
 
 
--Copyright (C) 1991-2011 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Altera Program License
--Subscription Agreement, Altera MegaCore Function License
--Agreement, or other applicable license agreement, including,
--without limitation, that your use is for the sole purpose of
--programming logic devices manufactured by Altera and sold by
--Altera or its authorized distributors. Please refer to the
--applicable agreement for further details.
 
 
LIBRARY ieee;
USE ieee.std_logic_1164.all;
 
LIBRARY altera_mf;
USE altera_mf.all;
 
ENTITY instMem IS
PORT
(
address : IN STD_LOGIC_VECTOR (10 DOWNTO 0);
data : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
outclock : IN STD_LOGIC ;
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
);
END instMem;
 
 
ARCHITECTURE SYN OF instmem IS
 
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (31 DOWNTO 0);
 
 
 
COMPONENT altsyncram
GENERIC (
clock_enable_input_a : STRING;
clock_enable_output_a : STRING;
intended_device_family : STRING;
lpm_type : STRING;
numwords_a : NATURAL;
operation_mode : STRING;
outdata_aclr_a : STRING;
outdata_reg_a : STRING;
power_up_uninitialized : STRING;
widthad_a : NATURAL;
width_a : NATURAL;
width_byteena_a : NATURAL
);
PORT (
address_a : IN STD_LOGIC_VECTOR (10 DOWNTO 0);
clock0 : IN STD_LOGIC ;
data_a : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
wren_a : IN STD_LOGIC ;
clock1 : IN STD_LOGIC ;
q_a : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
);
END COMPONENT;
 
BEGIN
q <= sub_wire0(31 DOWNTO 0);
 
altsyncram_component : altsyncram
GENERIC MAP (
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
intended_device_family => "Cyclone II",
lpm_type => "altsyncram",
numwords_a => 2048,
operation_mode => "SINGLE_PORT",
outdata_aclr_a => "NONE",
outdata_reg_a => "CLOCK1",
power_up_uninitialized => "FALSE",
widthad_a => 11,
width_a => 32,
width_byteena_a => 1
)
PORT MAP (
address_a => address,
clock0 => inclock,
data_a => data,
wren_a => wren,
clock1 => outclock,
q_a => sub_wire0
);
 
 
 
END SYN;
 
-- ============================================================
-- CNX file retrieval info
-- ============================================================
-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
-- Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
-- Retrieval info: PRIVATE: AclrByte NUMERIC "0"
-- Retrieval info: PRIVATE: AclrData NUMERIC "0"
-- Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: Clken NUMERIC "0"
-- Retrieval info: PRIVATE: DataBusSeparated NUMERIC "1"
-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
-- Retrieval info: PRIVATE: MIFfilename STRING ""
-- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "2048"
-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
-- Retrieval info: PRIVATE: RegAddr NUMERIC "1"
-- Retrieval info: PRIVATE: RegData NUMERIC "1"
-- Retrieval info: PRIVATE: RegOutput NUMERIC "1"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-- Retrieval info: PRIVATE: SingleClock NUMERIC "0"
-- Retrieval info: PRIVATE: UseDQRAM NUMERIC "1"
-- Retrieval info: PRIVATE: WRCONTROL_ACLR_A NUMERIC "0"
-- Retrieval info: PRIVATE: WidthAddr NUMERIC "11"
-- Retrieval info: PRIVATE: WidthData NUMERIC "32"
-- Retrieval info: PRIVATE: rden NUMERIC "0"
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "2048"
-- Retrieval info: CONSTANT: OPERATION_MODE STRING "SINGLE_PORT"
-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK1"
-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "11"
-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "32"
-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
-- Retrieval info: USED_PORT: address 0 0 11 0 INPUT NODEFVAL "address[10..0]"
-- Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL "data[31..0]"
-- Retrieval info: USED_PORT: inclock 0 0 0 0 INPUT VCC "inclock"
-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT NODEFVAL "outclock"
-- Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL "q[31..0]"
-- Retrieval info: USED_PORT: wren 0 0 0 0 INPUT NODEFVAL "wren"
-- Retrieval info: CONNECT: @address_a 0 0 11 0 address 0 0 11 0
-- Retrieval info: CONNECT: @clock0 0 0 0 0 inclock 0 0 0 0
-- Retrieval info: CONNECT: @clock1 0 0 0 0 outclock 0 0 0 0
-- Retrieval info: CONNECT: @data_a 0 0 32 0 data 0 0 32 0
-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
-- Retrieval info: CONNECT: q 0 0 32 0 @q_a 0 0 32 0
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem.vhd TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem.inc FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem.cmp TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem.bsf FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem_inst.vhd TRUE
-- Retrieval info: LIB_FILE: altera_mf
-- megafunction wizard: %RAM: 1-PORT%
-- GENERATION: STANDARD
-- VERSION: WM1.0
-- MODULE: altsyncram
 
-- ============================================================
-- File Name: instMem.vhd
-- Megafunction Name(s):
-- altsyncram
--
-- Simulation Library Files(s):
-- altera_mf
-- ============================================================
-- ************************************************************
-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
--
-- 11.1 Build 259 01/25/2012 SP 2 SJ Web Edition
-- ************************************************************
 
 
--Copyright (C) 1991-2011 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Altera Program License
--Subscription Agreement, Altera MegaCore Function License
--Agreement, or other applicable license agreement, including,
--without limitation, that your use is for the sole purpose of
--programming logic devices manufactured by Altera and sold by
--Altera or its authorized distributors. Please refer to the
--applicable agreement for further details.
 
 
LIBRARY ieee;
USE ieee.std_logic_1164.all;
 
LIBRARY altera_mf;
USE altera_mf.all;
 
ENTITY instMem IS
PORT
(
address : IN STD_LOGIC_VECTOR (10 DOWNTO 0);
data : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
outclock : IN STD_LOGIC ;
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
);
END instMem;
 
 
ARCHITECTURE SYN OF instmem IS
 
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (31 DOWNTO 0);
 
 
 
COMPONENT altsyncram
GENERIC (
clock_enable_input_a : STRING;
clock_enable_output_a : STRING;
intended_device_family : STRING;
lpm_type : STRING;
numwords_a : NATURAL;
operation_mode : STRING;
outdata_aclr_a : STRING;
outdata_reg_a : STRING;
power_up_uninitialized : STRING;
widthad_a : NATURAL;
width_a : NATURAL;
width_byteena_a : NATURAL
);
PORT (
address_a : IN STD_LOGIC_VECTOR (10 DOWNTO 0);
clock0 : IN STD_LOGIC ;
data_a : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
wren_a : IN STD_LOGIC ;
clock1 : IN STD_LOGIC ;
q_a : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
);
END COMPONENT;
 
BEGIN
q <= sub_wire0(31 DOWNTO 0);
 
altsyncram_component : altsyncram
GENERIC MAP (
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
intended_device_family => "Cyclone II",
lpm_type => "altsyncram",
numwords_a => 2048,
operation_mode => "SINGLE_PORT",
outdata_aclr_a => "NONE",
outdata_reg_a => "CLOCK1",
power_up_uninitialized => "FALSE",
widthad_a => 11,
width_a => 32,
width_byteena_a => 1
)
PORT MAP (
address_a => address,
clock0 => inclock,
data_a => data,
wren_a => wren,
clock1 => outclock,
q_a => sub_wire0
);
 
 
 
END SYN;
 
-- ============================================================
-- CNX file retrieval info
-- ============================================================
-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
-- Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
-- Retrieval info: PRIVATE: AclrByte NUMERIC "0"
-- Retrieval info: PRIVATE: AclrData NUMERIC "0"
-- Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: Clken NUMERIC "0"
-- Retrieval info: PRIVATE: DataBusSeparated NUMERIC "1"
-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
-- Retrieval info: PRIVATE: MIFfilename STRING ""
-- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "2048"
-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
-- Retrieval info: PRIVATE: RegAddr NUMERIC "1"
-- Retrieval info: PRIVATE: RegData NUMERIC "1"
-- Retrieval info: PRIVATE: RegOutput NUMERIC "1"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-- Retrieval info: PRIVATE: SingleClock NUMERIC "0"
-- Retrieval info: PRIVATE: UseDQRAM NUMERIC "1"
-- Retrieval info: PRIVATE: WRCONTROL_ACLR_A NUMERIC "0"
-- Retrieval info: PRIVATE: WidthAddr NUMERIC "11"
-- Retrieval info: PRIVATE: WidthData NUMERIC "32"
-- Retrieval info: PRIVATE: rden NUMERIC "0"
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "2048"
-- Retrieval info: CONSTANT: OPERATION_MODE STRING "SINGLE_PORT"
-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK1"
-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "11"
-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "32"
-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
-- Retrieval info: USED_PORT: address 0 0 11 0 INPUT NODEFVAL "address[10..0]"
-- Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL "data[31..0]"
-- Retrieval info: USED_PORT: inclock 0 0 0 0 INPUT VCC "inclock"
-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT NODEFVAL "outclock"
-- Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL "q[31..0]"
-- Retrieval info: USED_PORT: wren 0 0 0 0 INPUT NODEFVAL "wren"
-- Retrieval info: CONNECT: @address_a 0 0 11 0 address 0 0 11 0
-- Retrieval info: CONNECT: @clock0 0 0 0 0 inclock 0 0 0 0
-- Retrieval info: CONNECT: @clock1 0 0 0 0 outclock 0 0 0 0
-- Retrieval info: CONNECT: @data_a 0 0 32 0 data 0 0 32 0
-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
-- Retrieval info: CONNECT: q 0 0 32 0 @q_a 0 0 32 0
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem.vhd TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem.inc FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem.cmp TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem.bsf FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL instMem_inst.vhd TRUE
-- Retrieval info: LIB_FILE: altera_mf

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.