Hi i have written a vhdl code along with the testbench..when i simulate it in the modelSim i don't get an expected result The VHDL Code is given below Library ieee; use ieee.std_logic_1164.all; entity PowerSeq is port(fpga_clk: in std_logic; Enable_Bias_1V, Enable_3V3, Enable_1P5V, Enable_1V: out std_logic; PG_3V3: in std_logic); end PowerSeq; architecture MPU_PowerSeq of PowerSeq is signal pon_state: integer:= 0; begin process(fpga_clk) begin if(rising_edge(fpga_clk)) then if(pon_state = 0) then Enable_3V3 <= '1'; Enable_1P5V <= '1'; Enable_1V <= '0'; Enable_Bias_1V <= '1'; pon_state <= 1; end if; if(pon_state = 1) then if(PG_3V3 = '1') then Enable_1V <= '1'; end if; end if; end if; end process; end MPU_PowerSeq; ------------------------------------------------------------------------ ------------------------------------------------------------------------ ------ and the Test bench is also given below library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all; entity PowerSeq is end PowerSeq; architecture MPU_PowerSeq of PowerSeq is component Sequence is port(fpga_clk : in std_logic; Reset: in std_logic; Enable_Bias_1V, Enable_3V3, Enable_1P5V, Enable_1V: out std_logic; PG_3V3: in std_logic); end component; signal Reset: std_logic:= '0'; signal fpga_clk : std_logic:= '0'; signal Enable_Bias_1V: std_logic:= '0'; signal Enable_3V3: std_logic:= '0'; signal Enable_1P5V: std_logic:= '0'; signal Enable_1V: std_logic:= '0'; signal pon_state: integer:= 0; signal PG_3V3: std_logic:= '0'; constant tb_time: time:= 15.5 ns; begin uut: sequence port map( Reset => Reset, fpga_clk => fpga_clk, Enable_Bias_1V => Enable_Bias_1V, Enable_3V3 => Enable_3V3, Enable_1P5V => Enable_1P5V, Enable_1V => Enable_1V, PG_3V3 => PG_3V3 ); stimlus: process begin fpga_clk <= '0' after tb_time, '1' after 2 * tb_time; wait for 2 * tb_time; end process; tb: process begin wait for 50 ns ; Reset <= '0'; Enable_3V3 <= '0'; Enable_3V3 <= '0'; Enable_1V <= '0'; wait for 50 ns; Reset <= '1'; wait for 1 us; end process; end;
1) What do you expect? 2) I assume this code is not to be synthesized 3) https://stackoverflow.com/questions/17904514/vhdl-how-should-i-create-a-clock-in-a-testbench Erik
thanks for your reply but what things should i change in testbench to make it synthesizable?
Nothing. Testbench has nothing todo with synthesiser. Again, what is not working in your simulation? maybe you are fooled by your resets etc?
1 | tb: process |
2 | begin
|
3 | wait for 50 ns ; |
4 | Reset <= '0'; |
5 | Enable_3V3 <= '0'; |
6 | Enable_3V3 <= '0'; |
7 | Enable_1V <= '0'; |
8 | wait for 50 ns; |
9 | Reset <= '1'; |
10 | wait for 1 us; |
11 | end process; |
12 | |
13 | |
14 | |
15 | |
16 | tb: process |
17 | begin
|
18 | wait for 50 ns ; |
19 | Reset <= '0'; |
20 | Enable_3V3 <= '0'; |
21 | Enable_3V3 <= '0'; |
22 | Enable_1V <= '0'; |
23 | wait for 50 ns; |
24 | Reset <= '1'; |
25 | |
26 | wait; -- STOP THIS PROCESS HERE? |
27 | |
28 | |
29 | end process; |
I have changed the above testbench. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all; entity PowerSeq is end PowerSeq; architecture MPU_PowerSeq of PowerSeq is component Sequence is port(fpga_clk : in std_logic; Reset : in std_logic; Enable_Bias_1V, Enable_3V3, Enable_1P5V, Enable_1V: out std_logic; PG_3V3 : in std_logic ); end component; signal Reset : std_logic:= '0'; signal fpga_clk : std_logic:= '0'; signal Enable_Bias_1V : std_logic:= '0'; signal Enable_3V3 : std_logic:= '0'; signal Enable_1P5V : std_logic:= '0'; signal Enable_1V : std_logic:= '0'; signal pon_state : integer:= 0; signal PG_3V3 : std_logic:= '0'; constant tb_time : time:= 1 ns; begin uut: sequence port map( Reset => Reset, fpga_clk => fpga_clk, Enable_Bias_1V => Enable_Bias_1V, Enable_3V3 => Enable_3V3, Enable_1P5V => Enable_1P5V, Enable_1V => Enable_1V, PG_3V3 => PG_3V3 ); stimlus: process begin fpga_clk <= '0' after tb_time, '1' after 2 * tb_time; wait for 2 * tb_time; end process; tb: process begin wait for 5 ns ; Reset <= '0'; Enable_Bias_1V <= '1'; Enable_3V3 <= '1'; Enable_1P5V <= '1'; wait for 5 ns; if(pon_state = 0) then Enable_Bias_1V <= '1'; Enable_3V3 <= '1'; Enable_1P5V <= '1'; pon_state <= 1; end if; if(pon_state = 1) then PG_3V3 <= '1'; Enable_1v <= '1'; end if; -- wait for 5 ns; --Reset <= '1'; end process; end;
1 | $ vlib work |
2 | |
3 | $ vcom sequencer.vhd |
4 | Model Technology ModelSim SE-64 vcom 10.3d Compiler 2014.10 Oct 7 2014 |
5 | -- Loading package STANDARD |
6 | -- Loading package TEXTIO |
7 | -- Loading package std_logic_1164 |
8 | -- Compiling entity PowerSeq |
9 | -- Compiling architecture MPU_PowerSeq of PowerSeq |
10 | Errors: 0, Warnings: 0 |
11 | |
12 | $ vcom sequencer_tb.vhd |
13 | Model Technology ModelSim SE-64 vcom 10.3d Compiler 2014.10 Oct 7 2014 |
14 | -- Loading package STANDARD |
15 | -- Loading package TEXTIO |
16 | -- Loading package std_logic_1164 |
17 | -- Loading package NUMERIC_STD |
18 | -- Loading package std_logic_arith |
19 | -- Loading package STD_LOGIC_UNSIGNED |
20 | -- Compiling entity PowerSeq |
21 | -- Compiling architecture MPU_PowerSeq of PowerSeq |
22 | ###### sequencer_tb.vhd(8): component Sequence is |
23 | ** Error: sequencer_tb.vhd(8): near "Sequence": expecting IDENTIFIER |
24 | Errors: 1, Warnings: 0 |
After fixing some identifiers errors. Than I had to fix mismatched component/entity description and - maybe this is the important thing - add additional delay after "if(pon_state = 0) then ... end if;" in your stimulus generation. Take a look again for the concept of signals in VHDL. See simulation results in the picture. I also attach the modified testbench. Duke
I am always impressed that people spend time on analyzizng other
people's code to find the syntax issues. Shouldn't it be a task to learn
to do that by one self?
BTW: Duke, you seem to be using and old MOdelSIM with data 2014.
>"Model Technology ModelSim SE-64 vcom 10.3d Compiler 2014.10 Oct 7 2014"
Why is this?
Are you using an old dongle, too? :D :D :D
world's best FPGA-Pongo wrote: Syntax errors are easy to remedy. > Why is this? No time for update :-) (And I don't need the new features yet.) Duke
Hi Duke, Actually i have a doubt about the code you have edited. can we use 'if' statement inside a uut process?
Hareesh M. wrote: > can we use 'if' > statement inside a uut process? Yes of course. See LRM (p. 125): https://edg.uchicago.edu/~tang/VHDLref.pdf Duke
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.