Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
20688 Discussions

[Help on VHDL] FATAL ERROR while loading design

Altera_Forum
Honored Contributor II
2,506 Views

Hi guys, I've just started learning VHDL for a week on my own so i'm still very new to it. I'm doing a practice on implementing a 4-bit parallel-out serial shift register.. My codings can be complied but it shows  

 

" # ** Fatal: (vsim-3347) Port 'din' is not constrained.# Time: 0 ns Iteration: 0 Instance: /shiftreg File: /EDCP6/proj15/jianhua/vhdl/Lab3_compare.vhd Line: 5# FATAL ERROR while loading design " when i tried to simulate it. can anyone help me out with this?  

 

 

************************************************** ********************************************* 

 

library IEEE; 

use IEEE.STD_LOGIC_1164.ALL; 

 

entity shiftreg is port ( 

din: in std_logic_vector; -- data in 

clk: in std_logic; -- Clock 

clr: in std_logic; -- Clear  

pset: in std_logic; --Preset 

q : out std_logic_vector(3 downto 0) -- output Q 

); 

 

end; 

 

architecture rtl of shiftreg is 

begin 

 

process (clk, clr,pset) 

begin 

if (pset='0') then 

q <= "1111"; 

elsif (clr='0') then 

q <= "0000"; 

elsif (clk'event and clk = '1') then 

q <= din;  

end if; 

 

end process; 

 

end rtl;
0 Kudos
5 Replies
Altera_Forum
Honored Contributor II
1,072 Views

Trydin: in std_logic_vector(3 downto 0); -- data in 

The error message tells you that your port din doesn't have a defined size. AFAIK unconstrained arrays can't be used on ports.
0 Kudos
Altera_Forum
Honored Contributor II
1,072 Views

Hi daixiwen (http://www.alteraforum.com/forum/member.php?u=4443)! Thanks for replying my thread.  

 

I realised i had left out the input length but for my case, i have a 2-bit input (AND gate) and it does not match with the 4-bit output! 

 

Instead i tried forcing my inputs to a LOW but then again i realised, i need to be able to switch my input to a HIGH too. Any idea on what should i do?  

 

 

din1: in std_logic_vector:="0" ; din2: in std_logic_vector:="0" ; 

This was what i did but i couldn't force it a high when after simulating it! What should i do? :confused:
0 Kudos
Altera_Forum
Honored Contributor II
1,072 Views

why have you declared a std_logic_vector of only 1 bit? you really should give it a fixed length, otherwise its really just a std_logic 

 

If you need to change the value during simulation, you should write a testbench. 

 

Your post here is not very clear. If you have a 4 bit output, you need to connect all 4 bits to something.
0 Kudos
Altera_Forum
Honored Contributor II
1,072 Views

Thanks for the help Tricky! I got it working now. 

 

library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity shiftreg is port ( A: in std_logic; -- data in B: in std_logic; clk: in std_logic; -- Clock clr: in std_logic; -- Clear preset: in std_logic; --Preset q : out std_logic_vector(3 downto 0) -- output Q ); end; architecture rtl of shiftreg is signal q_int : std_logic_vector(3 downto 0); begin process (clk, clr,preset) begin if (preset='0') then q_int <= "1111"; elsif (clr='0') then q_int <= "0000"; elsif (clk'event and clk = '1') then q_int(0) <= A and B; q_int(1) <= q_int(0); q_int(2) <= q_int(1); q_int(3) <= q_int(2); end if; end process; q <= q_int; end rtl; 

Bu how do i write a test bench? I tried writing one myself i think it's pretty messed up and it doesn't seem to produce the waveform i wanted. 

 

 

Testbench 

Library IEEE; Use IEEE.std_logic_1164.all; Entity shiftregTB is end; Architecture rtl of shiftregTB is signal A,B,clk,clr,preset: std_logic; signal q,q_int : std_logic_vector(3 downto 0); begin UUT : entity work.shiftreg port map(A,B,clk,clr,preset,q_int); tb : process begin preset<='0'; wait for 10 ns; preset<='1'; wait for 10 ns; clr<='0'; wait for 20 ns; clr<='1'; wait for 20 ns; clk<='1'; wait for 20 ns; A<='1'; wait for 30 ns; B<='1'; wait for 30 ns; A<='0'; wait for 40 ns; B<= '0'; wait for 50 ns; end process tb; q<=q_int; end;
0 Kudos
Altera_Forum
Honored Contributor II
1,072 Views

your test bench is a good starting point. It is usually easier to generate the clock in a separate process and concentrate on the other signals in your main test bench process. 

What are the differences between what you want and what you get?
0 Kudos
Reply