私は問題に直面しています...p3、p6、p9、p1、p4p7が8ビットstd_logic_vectorです。
(p3 + 2 * p6 + p9)-(p1 + 2 * p4 + p7)のような操作をマルチピアなしでシフト操作(2 =>左シフト1)で実行したいので、結果は+または-になります。 ve。
署名されたものが必要です。255を超える場合は、結果を255にします。それ以外の場合は、8ビット値を指定します。最初のh1は間違った結果を出している。
以下にコードがあります
-
- Company:
-- Engineer:
--
-- Create Date: 21:01:45 01/11/2013
-- Design Name:
-- Module Name: HRZ - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity HRZ is
PORT ( CLK : IN STD_LOGIC;
RST : IN STD_LOGIC;
P1,P3,P4,P6,P7,P9 : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
MAG_HRZ : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
end HRZ;
architecture Behavioral of HRZ is
SIGNAL H1: signed(17 DOWNTO 0) ;
SIGNAL THRESHOLD: signed(17 DOWNTO 0):="000000000011111111";
begin
P : PROCESS(CLK)
BEGIN
H1<=SIGNED(('0'&P3+'0'&P6(7 DOWNTO 0)&'0'+'0'&P9)-('0'&P1+'0'&P4(7 DOWNTO 0)&'0'+'0'&P7));
IF(H1>=THRESHOLD) THEN
MAG_HRZ<="11111111";
ELSE
IF H1(17)='0' THEN
MAG_HRZ<=H1(7)&H1(6)&H1(5)&H1(4)&H1(3)&H1(2)&H1(1)&H1(0);
ELSE
MAG_HRZ<=NOT(H1(7)&H1(6)&H1(5)&H1(4)&H1(3)&H1(2)&H1(1)&H1(0))+'1';
END IF;
END IF;
END PROCESS P;
end Behavioral;
vh