디자인"은

U

umairsiddiqui

Guest
이 코드를 고려해야합니다 ...
이 ALU의 연산 단위입니다 :
지원합니다 : 추가, SUB로, ADC 및 SBB
문제는 특정 코드를 17bit subtractor, 16 비트 adder가 필요하고 16 - 휴대 비트 adder -했다.어떻게 그것을 줄이는 데 도움 주시기 바랍니다 크기가 ...

<img src="http://www.edaboard.com/images/smiles/icon_confused.gif" alt="혼란" border="0" />
코드 :라이브러리는 IEEE;

사용 IEEE.STD_LOGIC_1164.ALL;

사용 IEEE.STD_LOGIC_ARITH.ALL;

사용 IEEE.STD_LOGIC_UNSIGNED.ALL;엔티티 알루입니다

std_logic_vector에서 포트 :) (15 downto 0);

b : std_logic_vector에서 (15 downto 0);

착 : std_logic에;

조합 : std_logic_vector (1 downto 0);

에 c : std_logic_vector (15 downto 0 아웃);

법정 : 아웃 std_logic;

ofl : std_logic 아웃);

엔드 알루;건축 행동 알루입니다

시작프로세스 (A와 B, 착, 조합)

변수 c_select : std_logic;

변수 a_temp,

b_temp,

c_temp : std_logic_vector (16 downto 0);시작

a_temp : = "0"&;

b_temp : = "0"식사와 침대;

조합의 경우 (1)입니다

때 '0 '= "c_select : = '0';

때 '1 '= "c_select : = 착;

사람이있을 땐 = "c_select : = '0 ';

결국 사건;

조합의 경우 (0)입니다

때 '0 '= "c_temp : = a_temp b_temp c_select;

때 '1 '= "c_temp : = a_temp - (b_temp c_select);

사람이있을 땐 = "c_temp : = (다른 분들에게도 ="'0 ');

결국 사건;

C "= c_temp (15 downto 0);

법원 "= c_temp (16);

ofl "= c_temp (15) xor c_temp (14);

최종 처리;마지막 행동;
 
안녕하세요 umair,
난 더 이상 그것을 최적화할 수없습니다 아래의 코드를 체크 아웃!
제발 테스트는 안된 걸 처음 않습니다.
희망이 당신 도움이!

코드 :

라이브러리는 IEEE;

사용 IEEE.STD_LOGIC_1164.ALL;

사용 IEEE.STD_LOGIC_ARITH.ALL;

사용 IEEE.STD_LOGIC_UNSIGNED.ALL;엔티티 알루입니다

std_logic_vector에서 포트 :) (15 downto 0);

b : std_logic_vector에서 (15 downto 0);

착 : std_logic에;

조합 : std_logic_vector (1 downto 0);

에 c : std_logic_vector (15 downto 0 아웃);

법정 : 아웃 std_logic;

ofl : std_logic 아웃);

엔드 알루;건축 행동 알루입니다

신호 b_int : std_logic_vector (15 downto 0);

신호 cy_int : std_logic_vector (15 downto 0);

신호 cin_int : std_logic;

시작

cin_int "= 찍기 (1) 착;

b_int "= A XOR B는 xor (조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 찍기 ( 0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0));

cy_int (0) "= cin_int 때 b_int (0) = '1 '다른 사람 (0);

cy_int (1) "= cy_int (0)이 b_int (1) = '1 '다른 사람 (1);

cy_int (2) "= cy_int (1) b_int (2) = '1 '다른 사람 (2);

cy_int (3) "= cy_int (2) b_int (3) = '1 '다른 사람 (3);

cy_int (4) "= cy_int (3) b_int (4) = '1 '다른 사람 (4);

cy_int (5) "= cy_int (4) b_int (5) = '1 '다른 사람 (5);

cy_int (6) "= cy_int (5) b_int (6) = '1 '다른 사람 (6);

cy_int (7) "= cy_int (6) 때 b_int (7) = '1 '다른 사람 (7);

cy_int (8) "= cy_int (7) 때 b_int (8) = '1 '다른 사람 (8);

cy_int (9) "= cy_int (8) 때 b_int (9) = '1 '다른 사람 (9);

cy_int (10) "= cy_int (9) 때 b_int (10) = '1 '다른 사람 (10);

cy_int (11) "= cy_int (10)이 b_int (11) = '1 '다른 사람 (11);

cy_int (12) "= cy_int (11)이 b_int (12) = '1 '다른 사람 (12);

cy_int (13) "= cy_int (12)이 b_int (13) = '1 '다른 사람 (13);

cy_int (14) "= cy_int (13)이 b_int (14) = '1 '다른 사람 (14);

cy_int (15) "= cy_int (14)이 b_int (15) = '1 '다른 사람 (15);C "= ((14 downto 0) & cin_int) xor b_int cy_int;

법원 "= cy_int (15);

ofl "= cy_int (14) xor cy_int (15);

마지막 행동;

 
아주 잘, 그래서이게 Verilog 코드를하면 도움이 될 것입 VHDL 모르겠어요.자일링스는 ISE 8.1 하나의 17 비트가 합성 addsub 스파르타에서 - 3.

코드 :

모듈 맨 (A와 B, 착, 연산, c 팀, 코트, ofl);

매개 변수를 비트 = 16;

입력 [비트 - 1 : 0] A와 B;

입력 착;

입력 [1시] 조합; / / 비트 1 착 수, 비트 0 ADD가 선택

철사 [비트 : 0] 싸이 = 착 & 찍기 [1];

출력 [비트 - 1 : 0] C;

출력 코트, ofl;(법정으로 C) = 찍기 [0] 할당?
(1'b0,) (1'b0, b) 사 : (1'b0,) - (1'b0, b) - 사;

ofl = 법정 ^ [비트 - 1을 할당] ^ b [비트 - 1] ^ C [비트 - 1];

endmodule
 
전체 자일링스, 통합 도서관 매크로를 블랙 박스로에 의해 처리됩니다
합성 툴.이러한 구성 요소의 구현 모델
NGO의 파일입니다.Ngdbuild의 NGO 때 실행되는 파일이 포함되어있습니다
제대로 설계를 구현합니다.

"라는 메시지가 ADSU16를 찾을 수없습니다"무시하실 수있습니다.

 
내가 XST 불평하고 중단 오류를 무시할 수없습니다 :

오류 : HDLCompilers : 87 - "test.v"5 호선 모듈을 찾을 수없습니다 / '원시 ADSU16'ModelSim도 불평 및 중단 :

** 오류 : (vsim - 3033) test.v (5) : 인스턴스화의 'ADSU16'실패했습니다.
설계 단위를 찾을 수없습니다.테스트 코드 :
코드 :

모듈 맨 (A와 B,들);

입력 [15시] A와 B;

출력 [15시]들;ADSU16 U1 (. (). B 조 (b) 항. S (들));

endmodule
 
확인을 나는 문제가 생겼어!
HDL을 들어, 인스턴스보다 오히려 ADSU16 없으며 그렇게 유추 해서도입니다.만약 당신과 함께 일하고있습니다
당신이 수있는 인스턴스에만 ADSU16 회로도 그럼!

아래의 코드는이 ..... 할 것입니다
Plaese http://toolbox.xilinx.com/docsan/xilinx5/data/docs/lib/lib0056_40.html를 참조하십시오
코드 :

모듈 addsub16 (,) A와 B, CI 소개, 형님, 공동, v를 추가합니다;

입력, CI를 추가합니다;

입력 [15시] A와 B;

출력 [15시] 합계;

출력 공동;

출력 v를;] 형님 [15시 reg;

공동 v를 reg;

co_int, 정크 reg;항상 @ (또는 B 추가 또는 CI를) 시작

만약 (추가)를 시작

(, 합계 co_int, 정크) = (, CI 소개) (B의 1'b1);

공동 = co_int;

결국 다른 시작

(, 합계 co_int, 정크) = (, CI 소개) - (B의 1'b1);

공동 = ~ co_int;



v를 = 액수 co_int ^ [15] ^ [15] ^ b [15];

최종 / / 항상 @ (또는 B 추가 또는 CI 소개)

endmodule

 
시도해 봤어?ISE 7.1.04i 및 8.1.01i 모두 17 비트 adder, 18 비트 subtractor, 그리고 LUTs의 행 (아마도 먹스를)를 만듭니다.아무것도 논리적으로 코드를 잘못 XST 단순히 addsub 인식하지 못합니다.

내 예를 들어 17 비트 addsub 만듭니다.

물론, 결과는 다음 버전의 경우 역 수 ISE.

 
네, 바로 echo47있습니다!!
난 우리가 이런 ..... 이런 짓을 할 필요가 있다고 생각
여기 회로도 ADSU16 번역!
난코드 :

ibrary는 IEEE;

사용 IEEE.STD_LOGIC_1164.ALL;

사용 IEEE.STD_LOGIC_ARITH.ALL;

사용 IEEE.STD_LOGIC_UNSIGNED.ALL;엔티티 알루입니다

std_logic_vector에서 포트 :) (15 downto 0);

b : std_logic_vector에서 (15 downto 0);

착 : std_logic에;

조합 : std_logic_vector (1 downto 0);

에 c : std_logic_vector (15 downto 0 아웃);

법정 : 아웃 std_logic;

ofl : std_logic 아웃);

엔드 알루;건축 행동 알루입니다

구성 요소 MUXCY_D

포트 (LO : 아웃 STD_ULOGIC;

오 : 아웃 STD_ULOGIC;

CI 소개 : STD_ULOGIC에;

디 : STD_ULOGIC에;

S : STD_ULOGIC에서);

마지막 구성 요소;구성 요소 MUXCY_L

포트 (LO : 아웃 STD_ULOGIC;

CI 소개 : STD_ULOGIC에;

디 : STD_ULOGIC에;

S : STD_ULOGIC에서);

마지막 구성 요소;구성 요소 MUXCY

포트 (오 : 아웃 STD_ULOGIC;

CI 소개 : STD_ULOGIC에;

디 : STD_ULOGIC에;

S : STD_ULOGIC에서);

마지막 구성 요소;신호 b_int : std_logic_vector (15 downto 0);

신호 cy_int : std_logic_vector (15 downto 0);

신호 cy_int_14 : std_logic;

신호 cin_int : std_logic;

시작

cin_int "= 찍기 (1) 착;

b_int "= A XOR B는 xor (조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 찍기 ( 0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0) & 조합 (0));MUXCY_L_0 : MUXCY_L 포트 매핑 (cy_int (0) cin_int, (0), b_int (0));

MUXCY_L_1 : MUXCY_L 포트지도 ((1), cy_int (0), (1), (1)) b_int cy_int;

MUXCY_L_2 : MUXCY_L 포트 매핑 ((2), cy_int (1), (2), (2)) b_int cy_int;

MUXCY_L_3 : MUXCY_L 포트 (지도 (3), cy_int (2), (3), (3)) b_int cy_int;

MUXCY_L_4 : MUXCY_L 포트 매핑 (cy_int (4), cy_int (3), (4), b_int (4));

MUXCY_L_5 : MUXCY_L 포트 매핑 (cy_int (5), cy_int (4), (5), b_int (5));

MUXCY_L_6 : MUXCY_L 포트 매핑 (cy_int (6), cy_int (5) (6), b_int (6));

MUXCY_L_7 : MUXCY_L 포트 매핑 (cy_int (7), cy_int (6) (7), b_int (7));

MUXCY_L_8 : MUXCY_L 포트 매핑 (cy_int (8), cy_int (7) (8), b_int (8));

MUXCY_L_9 : MUXCY_L 포트 매핑 (cy_int (9), cy_int (8) (9), b_int (9));

MUXCY_L_10 : MUXCY_L 포트 매핑 (cy_int (10), cy_int (9) (10), b_int (10));

MUXCY_L_11 : MUXCY_L 포트 매핑 ((11), cy_int (10) (11) (11)) b_int cy_int;

MUXCY_L_12 : MUXCY_L 포트 매핑 (cy_int (12), cy_int (11) (12), b_int (12));

MUXCY_L_13 : MUXCY_L 포트 매핑 ((13), cy_int (12) (13), b_int (13)) cy_int;

MUXCY_D_14 : MUXCY_D 포트 매핑 ((14), cy_int cy_int_14, cy_int (13) (14), b_int (14));

MUXCY_15 : MUXCY 포트 매핑 (cy_int (15), cy_int (14) (15), b_int (15));C "= ((14 downto 0) & cin_int) xor b_int cy_int;

법원 "= cy_int (15);

ofl "= cy_int_14 xor cy_int (15);

마지막 행동;
 
너무 강제 - 우리가 완전히 제외하는 옵션이없습니다 adsu16이 인스턴스를 프로젝트로 설계도 파일을 추가, adsu16 기호와 Io의 포트를 넣어.HDL을 instatiation 기능과 서식 파일을 생성 ....??????

매크로 배선 항목에 대한 항목이 아니지만, HDL을 사용할 수있습니다 ... 자일링스에 의해 아주 서투른 결정

하지만 adsu16에서 우리가 어떻게 배치를 최적화하려면 다음 contraints 사용할 수 FMAPs, RLOC 및 HU_SET contraints을 고려하지 않은가?

 
그건 사실이야,하지만 그것도 AND16, SUB16, CC16CLE에 대한 사실과 다른 많은 낡은 도서관 장치.일반적으로 당신은 그냥 컴파일러는 추론 산술, 카운터 등 때문에 합성기 이내 않는 좋은 최적화.(단, 우리는 그것 addsub와 함께 할 때 짜증나게 수행 및 오버플로를 사용하고 있어요.) 나는 ADSU16 인스턴스를하고 싶었 유일한 이유는 본 적이 비교했다 이건 제 예제 코드를 동작입니다.

만약 당신이 없으며 그렇게 유추 해서도 addsub 제약하고 싶다면, 새 모듈에 다음 코드를 넣어 수도 모듈 제약.

 

Welcome to EDABoard.com

Sponsor

Back
Top