azwaa
Member level 1
- Joined
- May 21, 2014
- Messages
- 32
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 6
- Activity points
- 197
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity correla is
port (
clk : in std_logic ;
rst : in std_logic ;
data: in std_logic_vector(11 downto 0) ;
code: in std_logic_vector(15 downto 0 ) ;
Q :out std_logic_vector(17 downto 0) ) ;
end entity ;
architecture arch of correla is
type RAM is array (0 to 3) of std_logic_vector(3 downto 0) ;
type ram16 is array (0 to 3) of signed(15 downto 0) ;
signal CD : RAM;
signal temp: ram16;
signal sum :signed (16 downto 0) ;
signal AB :signed (17 downto 0) ;
begin
CD(0) <= code(15 downto 12);
CD(1) <= code(11 downto 8);
CD(2) <= code(7 downto 4);
CD(3) <= code(3 downto 0);
étalement:process(clk,rst)
begin
if(rst='1') then
Q <=(others=>'0');
temp(0)<=x"0000";
temp(1)<=x"0000";
temp(2)<=x"0000";
temp(3)<=x"0000";
else
if(clk'event and clk ='1') then
for i in 0 to 3 loop
temp(i) <= signed(data)*signed(CD(i));
end loop ;
sum(0)<= temp(0)+temp(1) ;
sum(1)<= temp(2)+temp(3) ;
AB<=sum(0)+sum(1) ;
Q<=std_logic_vector(AB) ;
--
end if ;
end if ;
end process ;
end architecture ;
sum(0)<= temp(0)+temp(1) ;
use ieee.math_real.all ;
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity correla is
port (
clk : in std_logic ;
rst : in std_logic ;
data: in std_logic_vector(11 downto 0) ;
code: in std_logic_vector(15 downto 0 ) ;
Q :out std_logic_vector(17 downto 0) ) ;
end entity ;
architecture arch of correla is
type RAM is array (0 to 3) of std_logic_vector(3 downto 0) ;
type ram16 is array (0 to 3) of signed(15 downto 0) ;
type Rom is array (0 to 3) of signed(16 downto 0) ;
signal CD : RAM;
signal temp: ram16;
signal sum :Rom ;
signal AB :signed (17 downto 0) ;
begin
CD(0) <= code(15 downto 12);
CD(1) <= code(11 downto 8);
CD(2) <= code(7 downto 4);
CD(3) <= code(3 downto 0);
etalement:process(clk,rst)
begin
if(rst='1') then
Q <=(others=>'0');
temp(0)<=x"0000";
temp(1)<=x"0000";
temp(2)<=x"0000";
temp(3)<=x"0000";
sum(0)<="00000000000000000";
sum(1)<="00000000000000000";
else
if(clk'event and clk ='1') then
for i in 0 to 3 loop
temp(i) <= signed(data)*signed(CD(i));
end loop ;
sum(0)<= temp(0)+temp(1) ;
sum(1)<= temp(2)+temp(3) ;
AB<=sum(0)+sum(1) ;
Q<=std_logic_vector(AB) ;
--
end if ;
end if ;
end process ;
end architecture ;
sum(0)<= temp(0)+temp(1) ;
signal sum0 :signed (16 downto 0) ;
signal sum1 :signed (16 downto 0) ;
...
sum0<= resize(temp(0),17)+temp(1) ;
sum1<= resize(temp(2),17)+temp(3) ;
AB<=resize(sum0,18)+sum1 ;
resize(temp(0),17)+temp(1)
I think you should declare this package too...
Code:use ieee.math_real.all ;
thank you my friend !
but can you give me more information about :
Code:resize(temp(0),17)+temp(1)
why exactly did you choose 17 for temp(0) not temp(1) !!?
Because the the "+" function ensures all inputs are the same length before adding. So temp(1) is also extended to 17 bits.
Why don't you write down an example with input, expected intermediate results and output data? You can use it also to check the calculation steps in simulation yourself.
Presently I don't even understand the presentation of simulation data. Why do you split Q into 3 decimal numbers instead of displaying it binary?
I have seen the diagram before, it's a bit vague. I appreciate an example with data values.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?