我面臨一個問題......其中p3,p6,p9,p1,p4 p7是8位std_logic_vector。 (p3 + 2 * p6 + p9) - (p1 + 2 * p4 + p7)沒有乘法,而是通過移位操作(通過2 =>左移1),其結果可能是be +或-ve。無符號操作需要簽名變量或VHDL中的內容
所以我想簽名one.if它是超過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
P4,P3,P6,P9,P7,P1是固定的8位像素values..and如果一個 - 已經沒有。 。iwant它的絕對值。 – NjN 2013-03-02 13:48:03