Vhdl 蓄能器设计
谢谢大家,我在这里修改了帖子。我已经为陷阱过滤器编写了一个简单的VHDL代码,为每个任务使用了不同的组件。以下是示例代码,其中使用了不同的组件,并且除累加器组件(acc1)外,所有其他组件都工作正常,输出信号保持为零。在acc1 one组件中,我试图制作两个蓄能器,其中第一个acc1(第一个蓄能器的输出)是acc2的输入。由于其他组件正在工作,所以我在这里仅显示了代码中acc1组件的端口映射以及测试台Vhdl 蓄能器设计,vhdl,Vhdl,谢谢大家,我在这里修改了帖子。我已经为陷阱过滤器编写了一个简单的VHDL代码,为每个任务使用了不同的组件。以下是示例代码,其中使用了不同的组件,并且除累加器组件(acc1)外,所有其他组件都工作正常,输出信号保持为零。在acc1 one组件中,我试图制作两个蓄能器,其中第一个acc1(第一个蓄能器的输出)是acc2的输入。由于其他组件正在工作,所以我在这里仅显示了代码中acc1组件的端口映射以及测试台 library ieee; use ieee.std_logic_1164.all; use
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use IEEE.std_logic_unsigned.all;
use ieee.fixed_pkg.all;
ENTITY TRAPFILTER IS
GENERIC (
K : integer :=80;
L : integer :=200
--M : signed(9 downto 0) := to_signed(5)
);
PORT
(
CLK : IN STD_LOGIC;
RST : IN STD_LOGIC;
DATAIN : IN STD_LOGIC_VECTOR(13 DOWNTO 0);
DATAOUT : OUT STD_LOGIC_VECTOR(24 DOWNTO 0);
DATAOUT1 : OUT STD_LOGIC_VECTOR(25 DOWNTO 0); ---
READY : OUT STD_LOGIC;
Soutout : out std_logic_vector(23 downto 0);
Koutout : out std_logic_vector(13 downto 0);
Loutout : out std_logic_vector(13 downto 0)
);
END ENTITY TRAPFILTER;
ARCHITECTURE RTL OF TRAPFILTER IS
constant M : sfixed(1 downto -2) := to_sfixed(0.01,1,-2);
type Sdelay_reg is array(0 to 2) OF signed(21 downto 0);
signal S_reg : Sdelay_reg :=(others=>(others=>'0'));
-------------------------------------------------------------
signal y_reg0 : signed (27 downto 0) :=(others=>'0');
signal y_reg1 : signed (31 downto 0) :=(others=>'0');
-----------------------------------------------------------
signal in_reg : signed(13 downto 0) :=(others=>'0');
signal out_reg : signed(DATAOUT'length-1 downto 0) :=
(others=>'0');
-- ----------------------------------------------------------
signal fs : std_logic :='0';
--------------------kdelay component----------------------------------
component kdelay is
GENERIC (
K : integer :=80;
L : integer :=200
);
port
(
clk : in std_logic ;
rst : in std_logic;
din : in STD_LOGIC_VECTOR (13 downto 0);
kout : OUT STD_LOGIC_VECTOR (13 downto 0)
);
end component;
signal kout : std_logic_vector (13 downto 0) :=(others=>
'0');
--------------------Ldelay component----------------------
------------
component Ldelay is
GENERIC (
K : integer :=80;
L : integer :=200
);
port
(
clk : in std_logic ;
rst : in std_logic;
din : in STD_LOGIC_VECTOR (13 downto
0);
Lout : OUT STD_LOGIC_VECTOR (13 downto
0)
);
end component;
signal Lout : std_logic_vector (13 downto 0) :=
(others=>'0');
---------------------------------------------------
component sub_mult is
port(
clk : in std_logic ;
rst : in std_logic;
din : in STD_LOGIC_VECTOR (13 downto
0);
Sout : out STD_LOGIC_VECTOR (23
downto 0)
);
end component;
signal Sout : std_logic_vector (23
downto 0) :=(others=>'0');
-------------------------------------------
component accum1 is
port(
clk : in std_logic ;
rst : in std_logic;
din : in
STD_LOGIC_VECTOR (23 downto 0);
Acout : out
STD_LOGIC_VECTOR (24 downto 0);
Acout1 : out
STD_LOGIC_VECTOR (25 downto 0)
);
end component;
signal acc_out1 : std_logic_vector (24 downto 0) :=(others=>'0');
signal acc_out2 : std_logic_vector (25 downto 0) :=(others=>'0');
----------------------------------------------------------------
BEGIN
Koutout <= Kout;
Loutout <= Lout;
Soutout <= Sout;
in_reg <= signed (DATAIN);
DATAOUT <= acc_out1;--std_logic_vector(out_reg);
DATAOUT1 <= acc_out2;
utacc1:component accum1
port map(
clk => clk,
rst => rst,--: in std_logic;
din => Sout, --: OUT STD_LOGIC_VECTOR
(13 downto 0);
Acout => acc_out1, -- : out STD_LOGIC_VECTOR (24 downto 0)
Acout1 => acc_out2
);
END RTL;
------------------------Accum1 component----------------------------------
library IEEEieee;`
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use IEEE.std_logic_unsigned.all;
use ieee.fixed_pkg.all;
entity accum1 is port(
clk : in std_logic ;
rst : in std_logic;
din : in STD_LOGIC_VECTOR (23 downto 0);
Acout : out STD_LOGIC_VECTOR (24 downto 0);
Acout1 : out STD_LOGIC_VECTOR (25 downto 0)
);
end entity;
architecture rtl of accum1 is
signal dout : signed(24 downto 0) :=(others=>'0');
signal datain : signed(23 downto 0) :=(others=>'0');
signal dout2 : signed(25 downto 0) :=(others=>'0');
begin
datain <= signed(din);
process(clk,rst,datain)
variable cm : signed(24 downto 0);
begin
if(rst='1' ) then
dout <= (others=>'0');
dout2 <= (others=>'0');
cm := (others=>'0');
elsif(rising_edge(clk) and clk'event) then
cm := datain + cm;
dout <= cm ;
dout2 <= dout2 + cm ;
end if;
end process;
Acout <= std_logic_vector(dout);
Acout1 <= std_logic_vector(dout2) ;
end rtl;
------------------------test bench only trapfilter comppnent portmapping
uttrap5:component TRAPFILTER
PORT MAP
(
CLK => TestClk, -- : IN STD_LOGIC;
RST => i_rstb, -- : IN STD_LOGIC;
DATAIN => odata, --odata, -- : IN STD_LOGIC_VECTOR(13 DOWNTO 0);
DATAOUT => trap_out, --: OUT STD_LOGIC_VECTOR(13 DOWNTO 0); ---
DATAOUT1 => trap_out1,
READY => trap_ready, --: OUT STD_LOGIC
Koutout => Koutout, --out std_logic_vector(23 downto 0);
Loutout => loutout, --: out std_logic_vector(13 downto 0);
Soutout => Soutout
);
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
使用IEEE.std_logic_unsigned.all;
使用ieee.fixed_pkg.all;
实体TRAPFILTER是
一般的(
K:整数:=80;
L:整数:=200
--M:已签名(9到0):=已签名(5)
);
港口
(
CLK:标准逻辑中;
RST:标准逻辑中;
数据输入:标准逻辑向量(13到0);
数据输出:输出标准逻辑向量(24到0);
DATAOUT1:OUT标准逻辑向量(25到0)---
就绪:输出标准逻辑;
Soutout:out标准逻辑向量(23向下至0);
Koutout:out标准逻辑向量(13到0);
Loutout:out标准逻辑向量(13到0)
);
末端实体过滤器;
TRAPFILTER的RTL架构是
常数M:sfixed(1至-2):=至sfixed(0.01,1,-2);
类型Sdelay_reg是有符号(21到0)的数组(0到2);
信号S_reg:Sdelay_reg:=(其他=>(其他=>'0');
-------------------------------------------------------------
信号y_reg0:有符号(27向下至0):=(其他=>'0');
信号y_reg1:有符号(31向下至0):=(其他=>'0');
-----------------------------------------------------------
_reg中的信号:有符号(13向下至0):=(其他=>'0');
信号输出注册:已签名(数据输出长度-1向下至0):=
(其他=>'0');
-- ----------------------------------------------------------
信号fs:std_逻辑:='0';
--------------------kdelay组件----------------------------------
组件kdelay是
一般的(
K:整数:=80;
L:整数:=200
);
港口
(
clk:标准逻辑中;
rst:标准逻辑中;
din:标准逻辑向量(13至0);
输出标准逻辑向量(13到0)
);
端部元件;
信号输出:标准逻辑向量(13到0):=(其他=>
'0');
--------------------D铺设组件------------------
------------
组件显示为
一般的(
K:整数:=80;
L:整数:=200
);
港口
(
clk:标准逻辑中;
rst:标准逻辑中;
din:标准逻辑向量中(13向下)
0);
Lout:OUT标准逻辑向量(13向下)
0)
);
端部元件;
信号Lout:std_逻辑_向量(13向下至0):=
(其他=>'0');
---------------------------------------------------
组件子组件是
港口(
clk:标准逻辑中;
rst:标准逻辑中;
din:标准逻辑向量中(13向下)
0);
输出:输出标准逻辑向量(23
降到0)
);
端部元件;
信号源:标准逻辑向量(23
降到0):=(其他=>'0');
-------------------------------------------
组件accum1为
港口(
clk:标准逻辑中;
rst:标准逻辑中;
丁:在
标准逻辑向量(23向下至0);
A:出去
标准逻辑向量(24到0);
答案1:出去
标准逻辑向量(25到0)
);
端部元件;
信号acc_out1:std_逻辑_矢量(从24向下到0):=(其他=>'0');
信号acc_out2:std_逻辑_矢量(25向下至0):=(其他=>'0');
----------------------------------------------------------------
开始
Koutout“0”);
信号数据输入:有符号(23向下至0):=(其他=>'0');
信号dout2:有符号(25到0):=(其他=>'0');
开始
“0”中的数据;
elsif(上升沿(clk)和clk事件)然后
cm:=datain+cm;
dout trap_out,--:out标准逻辑向量(13到0)---
DATAOUT1=>trap_out1,
就绪=>陷阱就绪,--:输出标准逻辑
Koutout=>Koutout,--out标准逻辑向量(23向下至0);
Loutout=>lo