⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vgactr.vhd

📁 using judgement on average power overflow or too small to implement the protection on amplifier
💻 VHD
字号:
LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_signed.all;ENTITY vgactr IS    PORT (         clkin           : IN     STD_LOGIC;         IIN             : IN     STD_LOGIC_VECTOR(13 DOWNTO 0);         QIN             : IN     STD_LOGIC_VECTOR(13 DOWNTO 0);         SUP             : OUT    STD_LOGIC;         AVGUP           : OUT    STD_LOGIC;         AVGDOWN         : OUT    STD_LOGIC         --test            : OUT    STD_LOGIC--_VECTOR(27 DOWNTO 0)	);END vgactr;ARCHITECTURE rtl OF vgactr IS    SIGNAL downSPen  : STD_LOGIC;	SIGNAL itemp     : STD_LOGIC_VECTOR (13 DOWNTO 0) := (OTHERS => '0');	SIGNAL qtemp     : STD_LOGIC_VECTOR (13 DOWNTO 0) := (OTHERS => '0');		SIGNAL squ1      : STD_LOGIC_VECTOR (27 DOWNTO 0) := (OTHERS => '0');	SIGNAL squ2      : STD_LOGIC_VECTOR (27 DOWNTO 0) := (OTHERS => '0');	SIGNAL squ1temp  : STD_LOGIC_VECTOR (27 DOWNTO 0) := (OTHERS => '0');	SIGNAL squ2temp  : STD_LOGIC_VECTOR (27 DOWNTO 0) := (OTHERS => '0');	SIGNAL ssum      : STD_LOGIC_VECTOR (27 DOWNTO 0) := (OTHERS => '0');	SIGNAL totalp    : STD_LOGIC_VECTOR (39 DOWNTO 0) := (OTHERS => '0');	SIGNAL pavg      : STD_LOGIC_VECTOR (27 DOWNTO 0) := (OTHERS => '0');	SIGNAL suptmp    : STD_LOGIC;	SIGNAL avguptmp  : STD_LOGIC;	SIGNAL avgdowntmp: STD_LOGIC;	SIGNAL keep      : STD_LOGIC;	SIGNAL count     : STD_LOGIC_VECTOR (24 DOWNTO 0) := (OTHERS => '0');--24--8	SIGNAL num       : INTEGER := 0;	COMPONENT lpm_mult	GENERIC (		lpm_widtha		: NATURAL;		lpm_widthb		: NATURAL;		lpm_widthp		: NATURAL;		lpm_widths		: NATURAL;		lpm_type		: STRING;		lpm_representation		: STRING;		lpm_hint		: STRING	);	PORT (			dataa	: IN STD_LOGIC_VECTOR (lpm_widtha-1 DOWNTO 0);			datab	: IN STD_LOGIC_VECTOR (lpm_widthb-1 DOWNTO 0);			result	: OUT STD_LOGIC_VECTOR (lpm_widthp-1 DOWNTO 0)	);	END COMPONENT;	COMPONENT lpm_add_sub	GENERIC (		lpm_width		: NATURAL;		lpm_direction	: STRING;		lpm_type		: STRING;		lpm_hint		: STRING	);	PORT (			dataa	: IN STD_LOGIC_VECTOR (lpm_width-1 DOWNTO 0);			datab	: IN STD_LOGIC_VECTOR (lpm_width-1 DOWNTO 0);			result	: OUT STD_LOGIC_VECTOR (lpm_width-1 DOWNTO 0)	);	END COMPONENT;BEGIN	PROCESS(clkin)		VARIABLE num : INTEGER := 0;	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN            IF (num = 3) THEN               num := 0;               downSPen <= '1';            ELSE               num := num + 1;                downSPen <= '0';                 END IF;        END IF;    END PROCESS;	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN            IF (downSPen = '1') THEN            	itemp <= (NOT IIN(13)) & IIN(12 DOWNTO 0);            END IF;        END IF;    END PROCESS;	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN            IF (downSPen = '1') THEN            	qtemp <= (NOT QIN(13)) & QIN(12 DOWNTO 0);            END IF;        END IF;    END PROCESS;        --test <= downSPen;	I_square : lpm_mult -- component working out I^2	GENERIC MAP (		lpm_widtha => 14,		lpm_widthb => 14,		lpm_widthp => 28,		lpm_widths => 1,		lpm_type => "LPM_MULT",		lpm_representation => "SIGNED",		lpm_hint => "DEDICATED_MULTIPLIER_CIRCUITRY=YES,MAXIMIZE_SPEED=5"	)	PORT MAP (		dataa	=> itemp,		datab	=> itemp,		result  => squ1	);	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN            squ1temp <= squ1;        END IF;    END PROCESS;		Q_square : lpm_mult  -- component working out Q^2	GENERIC MAP (		lpm_widtha => 14,		lpm_widthb => 14,		lpm_widthp => 28,		lpm_widths => 1,		lpm_type => "LPM_MULT",		lpm_representation => "SIGNED",		lpm_hint => "DEDICATED_MULTIPLIER_CIRCUITRY=YES,MAXIMIZE_SPEED=5"	)	PORT MAP (		dataa	=> qtemp,		datab	=> qtemp,		result  => squ2	);	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN            squ2temp <= squ2;        END IF;    END PROCESS;	square_sum : lpm_add_sub	GENERIC MAP (		lpm_width => 28,		lpm_direction => "ADD",		lpm_type => "LPM_ADD_SUB",		lpm_hint => "ONE_INPUT_IS_CONSTANT=NO,CIN_USED=NO"	)	PORT MAP (		dataa => squ1temp,		datab => squ2temp,		result => ssum	);	PROCESS(clkin)	BEGIN         IF (clkin'EVENT AND clkin = '1') THEN			IF (num < 4096) THEN				num <= num + 1;				totalp <= totalp + ssum;			ELSE				num <= 0;				totalp <= (OTHERS => '0');			END IF;        END IF;    END PROCESS;    pavg <= totalp(39 DOWNTO 12);	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN            IF (ssum > 44100000) THEN--124264000--44100000				suptmp <= '1';			ELSE			    suptmp <= '0';			END IF;        END IF;    END PROCESS;	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN			IF (num = 4095 AND pavg > 15680000) THEN--15680000--17556526				avguptmp <= '1';			ELSE			    avguptmp <= '0';			END IF;        END IF;    END PROCESS;	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN            IF (num = 4095 AND pavg < 10) THEN				avgdowntmp <= '1';			ELSE			    avgdowntmp <= '0';			END IF;        END IF;    END PROCESS;     	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN			IF (count = 33554431) THEN --33554431--511			    keep <= '0';			ELSIF (avguptmp = '1' OR avgdowntmp = '1' OR suptmp = '1') THEN				keep <= '1';			END IF;        END IF;    END PROCESS;	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN			IF (count = 33554431) THEN --33554431--511			    AVGUP <= '0';			ELSIF (avguptmp = '1') THEN				AVGUP <= '1';			END IF;        END IF;    END PROCESS;	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN			IF (count = 33554431) THEN --33554431			    AVGDOWN <= '0';			ELSIF (avgdowntmp = '1') THEN				AVGDOWN <= '1';			END IF;        END IF;    END PROCESS;	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN			IF (count = 33554431) THEN --33554431			    SUP <= '0';			ELSIF (suptmp = '1') THEN				SUP <= '1';			END IF;        END IF;    END PROCESS;	PROCESS(clkin)	BEGIN 		IF (clkin'EVENT AND clkin = '1') THEN            IF (keep = '1') THEN				count <= count + 1;			END IF;        END IF;    END PROCESS;end rtl;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -