📄 jianbo.vhd
字号:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
USE ieee.std_logic_arith.all;
ENTITY JIANBO IS
PORT
(
CLOCK,RESET : IN STD_LOGIC;
CORDIC_X,CORDIC_Y : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
CORDIC_R,CORDIC_EPS : OUT STD_LOGIC_VECTOR(17 DOWNTO 0);
CORDIC_PHI : OUT STD_LOGIC_VECTOR(17 DOWNTO 0)
);
END JIANBO;
ARCHITECTURE a OF JIANBO IS
SIGNAL X0,Y0,Z0 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X1,Y1,Z1 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X2,Y2,Z2 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X3,Y3,Z3 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X4,Y4,Z4 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X5,Y5,Z5 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X6,Y6,Z6 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X7,Y7,Z7 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X8,Y8,Z8 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X9,Y9,Z9 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X10,Y10,Z10 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X11,Y11,Z11 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X12,Y12,Z12 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X13,Y13,Z13 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X14,Y14,Z14 : STD_LOGIC_VECTOR(17 DOWNTO 0);
SIGNAL X15,Y15,Z15 : STD_LOGIC_VECTOR(17 DOWNTO 0);
BEGIN
MAIN_PROC : PROCESS(CLOCK,RESET)
BEGIN
IF RESET = '1' THEN
CORDIC_R <= "000000000000000000";
CORDIC_EPS <= "000000000000000000";
CORDIC_PHI <= "000000000000000000";
ELSIF CLOCK'EVENT AND CLOCK = '1' THEN
--FOR THE ROTATE INITIAL
-- IF CORDIC_X = "0000000000000000" AND CORDIC_Y = "0000000000000000" THEN
-- X0 <= "000000000000000000";
-- Y0 <= "000000000000000000";
-- Z0 <= "101110001111101110";
--FOR THE ROTATE INITIAL
IF CORDIC_X(15) = '0' THEN
X0 <= CORDIC_X(15) & CORDIC_X(15) & CORDIC_X;
Y0 <= CORDIC_Y(15) & CORDIC_Y(15) & CORDIC_Y;
Z0 <= "000000000000000000";
ELSIF CORDIC_Y(15) = '0' THEN
X0 <= CORDIC_Y(15) & CORDIC_Y(15) & CORDIC_Y;
Y0 <= "000000000000000000" - (CORDIC_X(15) & CORDIC_X(15) & CORDIC_X);
Z0 <= "001111111111111111";
ELSE
X0 <= "000000000000000000" - (CORDIC_Y(15) & CORDIC_Y(15) & CORDIC_Y);
Y0 <= CORDIC_X(15) & CORDIC_X(15) & CORDIC_X;
Z0 <= "110000000000000000";
END IF;
--FOR THE 1TH ROTATE
IF Y0(17) = '0' THEN
X1 <= X0 + Y0;
Y1 <= Y0 - X0;
Z1 <= Z0 + "000111111111111111";
ELSE
X1 <= X0 - Y0;
Y1 <= Y0 + X0;
Z1 <= Z0 - "000111111111111111";
END IF;
--FOR THE 2TH ROTATE
IF Y1(17) = '0' THEN
X2 <= X1 + (Y1(17) & Y1(17 DOWNTO 1));
Y2 <= Y1 - (X1(17) & X1(17 DOWNTO 1));
Z2 <= Z1 + "000100101110001111";
ELSE
X2 <= X1 - (Y1(17) & Y1(17 DOWNTO 1));
Y2 <= Y1 + (X1(17) & X1(17 DOWNTO 1));
Z2 <= Z1 - "000100101110001111";
END IF;
--FOR THE 3TH ROTATE
IF Y2(17) = '0' THEN
X3 <= X2 + (Y2(17) & Y2(17) & Y2(17 DOWNTO 2));
Y3 <= Y2 - (X2(17) & X2(17) & X2(17 DOWNTO 2));
Z3 <= Z2 + "000010011111101100";
ELSE
X3 <= X2 - (Y2(17) & Y2(17) & Y2(17 DOWNTO 2));
Y3 <= Y2 + (X2(17) & X2(17) & X2(17 DOWNTO 2));
Z3 <= Z2 - "000010011111101100";
END IF;
--FOR THE 4TH ROTATE
IF Y3(17) = '0' THEN
X4 <= X3 + (Y3(17) & Y3(17) & Y3(17) & Y3(17 DOWNTO 3));
Y4 <= Y3 - (X3(17) & X3(17) & X3(17) & X3(17 DOWNTO 3));
Z4 <= Z3 + "000001010001000100";
ELSE
X4 <= X3 - (Y3(17) & Y3(17) & Y3(17) & Y3(17 DOWNTO 3));
Y4 <= Y3 + (X3(17) & X3(17) & X3(17) & X3(17 DOWNTO 3));
Z4 <= Z3 - "000001010001000100";
END IF;
--FOR THE 5TH ROTATE
IF Y4(17) = '0' THEN
X5 <= X4 + (Y4(17) & Y4(17) & Y4(17) & Y4(17) & Y4(17 DOWNTO 4));
Y5 <= Y4 - (X4(17) & X4(17) & X4(17) & X4(17) & X4(17 DOWNTO 4));
Z5 <= Z4 + "000000101000101100";
ELSE
X5 <= X4 - (Y4(17) & Y4(17) & Y4(17) & Y4(17) & Y4(17 DOWNTO 4));
Y5 <= Y4 + (X4(17) & X4(17) & X4(17) & X4(17) & X4(17 DOWNTO 4));
Z5 <= Z4 - "000000101000101100";
END IF;
--FOR THE 6TH ROTATE
IF Y5(17) = '0' THEN
X6 <= X5 + (Y5(17) & Y5(17) & Y5(17) & Y5(17) & Y5(17) & Y5(17 DOWNTO 5));
Y6 <= Y5 - (X5(17) & X5(17) & X5(17) & X5(17) & X5(17) & X5(17 DOWNTO 5));
Z6 <= Z5 + "000000010100010111";
ELSE
X6 <= X5 - (Y5(17) & Y5(17) & Y5(17) & Y5(17) & Y5(17) & Y5(17 DOWNTO 5));
Y6 <= Y5 + (X5(17) & X5(17) & X5(17) & X5(17) & X5(17) & X5(17 DOWNTO 5));
Z6 <= Z5 - "000000010100010111";
END IF;
--FOR THE 7TH ROTATE
IF Y6(17) = '0' THEN
X7 <= X6 + (Y6(17) & Y6(17) & Y6(17) & Y6(17) & Y6(17) & Y6(17) & Y6(17 DOWNTO 6));
Y7 <= Y6 - (X6(17) & X6(17) & X6(17) & X6(17) & X6(17) & X6(17) & X6(17 DOWNTO 6));
Z7 <= Z6 + "000000001010001011";
ELSE
X7 <= X6 - (Y6(17) & Y6(17) & Y6(17) & Y6(17) & Y6(17) & Y6(17) & Y6(17 DOWNTO 6));
Y7 <= Y6 + (X6(17) & X6(17) & X6(17) & X6(17) & X6(17) & X6(17) & X6(17 DOWNTO 6));
Z7 <= Z6 - "000000001010001011";
END IF;
--FOR THE 8TH ROTATE
IF Y7(17) = '0' THEN
X8 <= X7 + (Y7(17) & Y7(17) & Y7(17) & Y7(17) & Y7(17) & Y7(17) & Y7(17) & Y7(17 DOWNTO 7));
Y8 <= Y7 - (X7(17) & X7(17) & X7(17) & X7(17) & X7(17) & X7(17) & X7(17) & X7(17 DOWNTO 7));
Z8 <= Z7 + "000000000101000101";
ELSE
X8 <= X7 - (Y7(17) & Y7(17) & Y7(17) & Y7(17) & Y7(17) & Y7(17) & Y7(17) & Y7(17 DOWNTO 7));
Y8 <= Y7 + (X7(17) & X7(17) & X7(17) & X7(17) & X7(17) & X7(17) & X7(17) & X7(17 DOWNTO 7));
Z8 <= Z7 - "000000000101000101";
END IF;
--FOR THE 9TH ROTATE
IF Y8(17) = '0' THEN
X9 <= X8 + (Y8(17) & Y8(17) & Y8(17) & Y8(17) & Y8(17) & Y8(17) & Y8(17) & Y8(17) &
Y8(17 DOWNTO 8));
Y9 <= Y8 - (X8(17) & X8(17) & X8(17) & X8(17) & X8(17) & X8(17) & X8(17) & X8(17) &
X8(17 DOWNTO 8));
Z9 <= Z8 + "000000000010100010";
ELSE
X9 <= X8 - (Y8(17) & Y8(17) & Y8(17) & Y8(17) & Y8(17) & Y8(17) & Y8(17) & Y8(17) &
Y8(17 DOWNTO 8));
Y9 <= Y8 + (X8(17) & X8(17) & X8(17) & X8(17) & X8(17) & X8(17) & X8(17) & X8(17) &
X8(17 DOWNTO 8));
Z9 <= Z8 - "000000000010100010";
END IF;
--FOR THE 10TH ROTATE
IF Y9(17) = '0' THEN
X10 <= X9 + (Y9(17) & Y9(17) & Y9(17) & Y9(17) & Y9(17) & Y9(17) & Y9(17) & Y9(17) &
Y9(17) & Y9(17 DOWNTO 9));
Y10 <= Y9 - (X9(17) & X9(17) & X9(17) & X9(17) & X9(17) & X9(17) & X9(17) & X9(17) &
X9(17) & X9(17 DOWNTO 9));
Z10 <= Z9 + "000000000001010001";
ELSE
X10 <= X9 - (Y9(17) & Y9(17) & Y9(17) & Y9(17) & Y9(17) & Y9(17) & Y9(17) & Y9(17) &
Y9(17) & Y9(17 DOWNTO 9));
Y10 <= Y9 + (X9(17) & X9(17) & X9(17) & X9(17) & X9(17) & X9(17) & X9(17) & X9(17) &
X9(17) & X9(17 DOWNTO 9));
Z10 <= Z9 - "000000000001010001";
END IF;
--FOR THE 11TH ROTATE
IF Y10(17) = '0' THEN
X11 <= X10 + (Y10(17) & Y10(17) & Y10(17) & Y10(17) & Y10(17) & Y10(17) & Y10(17) & Y10(17) &
Y10(17) & Y10(17) & Y10(17 DOWNTO 10));
Y11 <= Y10 - (X10(17) & X10(17) & X10(17) & X10(17) & X10(17) & X10(17) & X10(17) & X10(17) &
X10(17) & X10(17) & X10(17 DOWNTO 10));
Z11 <= Z10 + "000000000000101000";
ELSE
X11 <= X10 - (Y10(17) & Y10(17) & Y10(17) & Y10(17) & Y10(17) & Y10(17) & Y10(17) & Y10(17) &
Y10(17) & Y10(17) & Y10(17 DOWNTO 10));
Y11 <= Y10 + (X10(17) & X10(17) & X10(17) & X10(17) & X10(17) & X10(17) & X10(17) & X10(17) &
X10(17) & X10(17) & X10(17 DOWNTO 10));
Z11 <= Z10 - "000000000000101000";
END IF;
--FOR THE 12TH ROTATE
IF Y11(17) = '0' THEN
X12 <= X11 + (Y11(17) & Y11(17) & Y11(17) & Y11(17) & Y11(17) & Y11(17) & Y11(17) & Y11(17) &
Y11(17) & Y11(17) & Y11(17) & Y11(17 DOWNTO 11));
Y12 <= Y11 - (X11(17) & X11(17) & X11(17) & X11(17) & X11(17) & X11(17) & X11(17) & X11(17) &
X11(17) & X11(17) & X11(17) & X11(17 DOWNTO 11));
Z12 <= Z11 + "000000000000010100";
ELSE
X12 <= X11 - (Y11(17) & Y11(17) & Y11(17) & Y11(17) & Y11(17) & Y11(17) & Y11(17) & Y11(17) &
Y11(17) & Y11(17) & Y11(17) & Y11(17 DOWNTO 11));
Y12 <= Y11 + (X11(17) & X11(17) & X11(17) & X11(17) & X11(17) & X11(17) & X11(17) & X11(17) &
X11(17) & X11(17) & X11(17) & X11(17 DOWNTO 11));
Z12 <= Z11 - "000000000000010100";
END IF;
--FOR THE 13TH ROTATE
IF Y12(17) = '0' THEN
X13 <= X12 + (Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17) &
Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17 DOWNTO 12));
Y13 <= Y12 - (X12(17) & X12(17) & X12(17) & X12(17) & X12(17) & X12(17) & X12(17) & X12(17) &
X12(17) & X12(17) & X12(17) & X12(17) & X12(17 DOWNTO 12));
Z13 <= Z12 + "000000000000001010";
ELSE
X13 <= X12 - (Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17) &
Y12(17) & Y12(17) & Y12(17) & Y12(17) & Y12(17 DOWNTO 12));
Y13 <= Y12 + (X12(17) & X12(17) & X12(17) & X12(17) & X12(17) & X12(17) & X12(17) & X12(17) &
X12(17) & X12(17) & X12(17) & X12(17) & X12(17 DOWNTO 12));
Z13 <= Z12 - "000000000000001010";
END IF;
--FOR THE 14TH ROTATE
IF Y13(17) = '0' THEN
X14 <= X13 + (Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) &
Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17 DOWNTO 13));
Y14 <= Y13 - (X13(17) & X13(17) & X13(17) & X13(17) & X13(17) & X13(17) & X13(17) & X13(17) &
X13(17) & X13(17) & X13(17) & X13(17) & X13(17) & X13(17 DOWNTO 13));
Z14 <= Z13 + "000000000000000101";
ELSE
X14 <= X13 - (Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) &
Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17) & Y13(17 DOWNTO 13));
Y14 <= Y13 + (X13(17) & X13(17) & X13(17) & X13(17) & X13(17) & X13(17) & X13(17) & X13(17) &
X13(17) & X13(17) & X13(17) & X13(17) & X13(17) & X13(17 DOWNTO 13));
Z14 <= Z13 - "000000000000000101";
END IF;
--FOR THE 15TH ROTATE
IF Y14(17) = '0' THEN
X15 <= X14 + (Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) &
Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17 DOWNTO 14));
Y15 <= Y14 - (X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17) &
X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17 DOWNTO 14));
Z15 <= Z14 + "000000000000000010";
ELSE
X15 <= X14 - (Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) &
Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17) & Y14(17 DOWNTO 14));
Y15 <= Y14 + (X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17) &
X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17) & X14(17 DOWNTO 14));
Z15 <= Z14 - "000000000000000010";
END IF;
--FOR THE 16TH ROTATE
IF Y15(17) = '0' THEN
CORDIC_R <= X15 + (Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) &
Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) &
Y15(17 DOWNTO 15));
CORDIC_EPS <= Y15 - (X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) &
X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) &
X15(17 DOWNTO 15));
CORDIC_PHI <= Z15 + "000000000000000001";
ELSE
CORDIC_R <= X15 - (Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) &
Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) & Y15(17) &
Y15(17 DOWNTO 15));
CORDIC_EPS <= Y15 + (X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) &
X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) & X15(17) &
X15(17 DOWNTO 15));
CORDIC_PHI <= Z15 - "000000000000000001";
END IF;
END IF;
END PROCESS MAIN_PROC;
END a;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -