Forum Discussion
Altera_Forum
Honored Contributor
8 years agoNo logic elements although I have an output
Hello
Please guide me why I don't see any logic element for the current code : LIBRARY ieee; USE ieee.std_logic_1164.all; Use ieee.numeric_std.all; USE work.my_data_types.all; -- to define array of input ( package ) ENTITY test IS PORT ( clk: in std_logic; OutResult: out signed(9 downto 0)); end test; Architecture behave of test is Signal Im : Array2D:=(("0010000111","0001111110","0001001101","0000000000","0000000000"), ("0001001111","0010000100","0000101100","0000011011","0000000000"), ("0001011101","0010000100","0000100111","0000101001","0000000000"), ("0001011101","0010000100","0000100111","0000101001","0000000000"), ("0000000000","0000000000","0000000000","0000000000","0000000000")); signal Bufftemp:Array2D; signal Buffsig:signed(9 DOWNTO 0); begin Process (clk) variable i,j:integer range 0 to 7:=0; begin if (clk' event and clk='1') then for j in 0 to 1 loop for i in 0 to 1 loop Bufftemp(2*j,2*i+1)<= Im(2*j,2*i+1) - 5; end loop; end loop; end if; Buffsig<=Bufftemp(i,j); end process; OutResult<=Buffsig; end behave;26 Replies
- Altera_Forum
Honored Contributor
Without the code, I cannot tell. I assume your code is not what you already posted?
Storing an image in logic will be very expensive. You really should use ram. - Altera_Forum
Honored Contributor
--- Quote Start --- You cant "get more time" Remmeber that all processes run simultaneously. All assignments happen in parrellel I suggest reviewing your VHDL training materials. This is NOT like software programming. --- Quote End --- The number of logic elements are enormous ! is that because I have the entire image inside logic elements and I didn't utilize any memory ? - Altera_Forum
Honored Contributor
--- Quote Start --- You will benefit from Drawing the circuit you expect before writing any code. When writing VHDL you need to understand the circuit you're creating - it is VHSIC Hardware description language. So you need to know what hardware you are describing. --- Quote End --- Great remark ... I will work by it . Many thanks. - Altera_Forum
Honored Contributor
You will benefit from Drawing the circuit you expect before writing any code. When writing VHDL you need to understand the circuit you're creating - it is VHSIC Hardware description language. So you need to know what hardware you are describing.
- Altera_Forum
Honored Contributor
Is it the pipeline I thought I could make!
I will check it out , I am really thankful to you Mr. And will review my codes. For Modelsim I will try it out and give you feed back. Your efforts are highly appreciated. - Altera_Forum
Honored Contributor
You cant "get more time"
Remmeber that all processes run simultaneously. All assignments happen in parrellel I suggest reviewing your VHDL training materials. This is NOT like software programming. - Altera_Forum
Honored Contributor
Iam driving it in two processes to fill them simultaneously to get more time. If I have to I will split the array to two arrays.
- Altera_Forum
Honored Contributor
It makes it easier if you use code tags when posting code.
Second, you have a multiple driver error because i/j are not constant, and the compiler does not know that the array elements are not driven from multiple processes. You can only do this if the indeces are constants. I recommend you drive all elements of an array from a single process (it will be less complicated and error prone anyway). - Altera_Forum
Honored Contributor
Thank you , This is the code, the 2d image is :
TYPE Array2D IS ARRAY (0 TO 16, 0 TO 16) OF signed(9 DOWNTO 0); ENTITY AVhdl IS PORT ( clk: in std_logic; BuffD_RP1,BuffD_RP0: out vector_array); end AVhdl; Architecture behave of AVhdl is Signal Im : Array2D:=(("0010000111","0001111110","0001001101","0001011011","0001101001","0001101011","0001101001","0001100111","0001101000","0001100000","0001110011","0010000100","0010001111","0010000000","0001100000","0001000100","0000000000"), ("0010000111","0001111010","0001001010","0001011001","0001100110","0001101000","0001110010","0010000001","0001101111","0001011100","0001101001","0010000011","0001111010","0010011000","0001000111","0000010010","0000000000"), ("0001100011","0001110111","0001000110","0001010110","0001011111","0001100001","0001110100","0010011100","0010101100","0001101111","0001100011","0001101001","0001110100","0001100000","0000011001","0000110101","0000000000"), ("0001001100","0001111000","0001000101","0001011000","0001011011","0001100011","0001111000","0010011111","0010110010","0010101111","0001111000","0001010000","0010000001","0000101100","0000100100","0001111100","0000000000"), ("0001010010","0001111100","0001000101","0001100000","0001100000","0001100110","0010000101","0010011000","0010011111","0010100100","0010011111","0010100011","0010100111","0000100101","0001011111","0010001000","0000000000"), ("0001010101","0010000000","0001000100","0001100100","0001110110","0001101001","0001101100","0001011111","0001100000","0010010011","0010101001","0010011100","0001010110","0000110011","0010000110","0010000011","0000000000"), ("0001010110","0001111111","0001000100","0001011001","0001111011","0001010111","0000110001","0000101001","0001110100","0010100100","0010000101","0001010000","0000011011","0001011101","0010001101","0010000011","0000000000"), ("0001010010","0010000000","0001001000","0001011011","0001011100","0000101010","0000100001","0001101100","0001111100","0010011100","0010000010","0000101110","0000100111","0001111101","0010000100","0001111010","0000000000"), ("0001001011","0010000010","0001001110","0001010111","0000111001","0000100100","0001001000","0001111001","0001100001","0010000011","0001010001","0000110000","0001000100","0010000100","0001111100","0010000100","0000000000"), ("0000111010","0010000000","0001010011","0001000000","0000101001","0000111000","0001010000","0001101110","0010001001","0010000011","0001100101","0000110001","0001100011","0001111110","0010000110","0010110000","0000000000"), ("0000111010","0010000100","0001001010","0000111000","0001000100","0001001110","0000101101","0001100111","0001110111","0010000001","0001000001","0000110111","0001111011","0001111000","0010011111","0010111101","0000000000"), ("0000110001","0010001000","0001000001","0000111001","0001011111","0000110010","0000011101","0001001001","0001110011","0001101010","0000011100","0001000011","0001111111","0001110110","0010101110","0010110001","0000000000"), ("0001000011","0010000010","0000110110","0000110001","0001010010","0000110011","0000011010","0000111100","0001110100","0010001101","0001100000","0001000101","0001101101","0001101000","0010100001","0001001100","0000000000"), ("0001010011","0010000010","0000101101","0000100000","0001000000","0001000111","0000100100","0001010001","0001110011","0010001100","0010110010","0001101011","0001110010","0010001110","0001111110","0001000100","0000000000"), ("0001001111","0010000100","0000101100","0000011011","0000110101","0000101011","0000110010","0001100010","0001110011","0001111100","0010101001","0010001111","0001001111","0010001001","0001010100","0000111110","0000000000"), ("0001011101","0010000100","0000100111","0000101001","0000110011","0000101000","0001001111","0001101101","0001110110","0001111000","0010010101","0010011111","0001001110","0001010111","0000111110","0000110110","0000000000"), ("0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000","0000000000")); signal Bufftemp,Bufftemp1:Array2D; begin ------ RP0 RP0: Process (clk) variable i,j:integer range 0 to 7:=0; variable temp2,temp1:signed(9 DOWNTO 0); begin if (clk' event and clk='1') then i:=i+1; if i>7 then i:=0; j:=j+1; if j=8 then j:=0; end if; end if; temp1:=Im(2*j,2*i)+Im(2*j,2*i+2); Bufftemp(2*j,2*i+1)<= Im(2*j,2*i+1) - 5; BuffD_RP0(4*j+i)<=Bufftemp(2*j,2*i+1); Bufftemp(2*j,2*i)<=Im(2*j,2*i)+ 5; end if; end process; ------ RP1--------- RP1: Process (clk) variable i,j:integer range 0 to 7:=0; variable Stemp,Dold,Dnew,temp2,temp1:signed(9 DOWNTO 0); begin if (clk' event and clk='1') then i:=i+1; if i>7 then i:=0; j:=j+1; end if; temp1:=Im(2*j+1,2*i)+Im(2*j+1,2*i+2); Bufftemp(2*j+1,2*i+1)<= Im(2*j+1,2*i+1) - 5; Bufftemp(2*j+1,2*i)<=Im(2*j+1,2*i)+ 5; BuffD_RP1(4*j+i)<=Bufftemp(2*j+1,2*i); end if; end process; end behave; -- As you see i either use 2i, 2j with +1 or without it. So the same index in not repeated. - Altera_Forum
Honored Contributor
This is 3 clocks to get from i/j values top the outResult. One clock for each assignment. --- Quote Start --- -Modelsim is not work often with my designs ! I am using Quartus ! --- Quote End --- Why not? Maybe there is a problem? isnt that what we are here for? Quartus only does post synthesis simulation so is very slow and doesnt actually simulate your code, just the compiled version of it. RTL simulation would be much faster when you get to larger designs Yes, you can assign different elements of an array in different processes IF you are not using a loop. I suggest looking at the bits in the error. Or maybe post the whole code so we can help?Bufftemp(2*j,2*i+1)<= Im(2*j,2*i+1) - 5; Buffsig<=Bufftemp(i,j); OutResult<=Buffsig;