aiutare lo richiedono, con RTL codifica ...........

U

umairsiddiqui

Guest
prendere in considerazione questo codice ...
aritmetica, che è unità di ALU:
sostiene: ADD, SUB, ADC e FFS
problema è che, dato il codice richiedono 17bit subtractor, 16-bit di tolleranza, e 16-bit con tolleranza carry-in.please help come ridurre la dimensione ...

<img src="http://www.edaboard.com/images/smiles/icon_confused.gif" alt="Confuso" border="0" />
Codice:libreria IEEE;

IEEE.STD_LOGIC_1164.ALL uso;

IEEE.STD_LOGIC_ARITH.ALL uso;

IEEE.STD_LOGIC_UNSIGNED.ALL uso;entità alluminio è

Port (a: in std_logic_vector (15 downto 0);

b: in std_logic_vector (15 downto 0);

CIN: in std_logic;

op: in std_logic_vector (1 downto 0);

c: out std_logic_vector (15 downto 0);

giudice: in std_logic;

OFL: out std_logic);

fine alluminio;architettura comportamentale è di alluminio

iniziareprocesso (a, b, cin, op)

variabile c_select: std_logic;

a_temp variabile,

b_temp,

c_temp: std_logic_vector (16 downto 0);iniziare

a_temp: = "0" e uno;

b_temp: = "0" & b;

op caso (1) è

quando'0 '=> c_select: ='0';

quando'1 '=> c_select: = cin;

quando gli altri => c_select: ='0 ';

fine caso;

op caso (0) è

quando'0 '=> c_temp: = a_temp b_temp c_select;

quando'1 '=> c_temp: = a_temp - (b_temp c_select);

quando gli altri => c_temp: = (altri =>'0 ');

fine caso;

c <= c_temp (15 downto 0);

cout <= c_temp (16);

OFL <= c_temp (15) xor c_temp (14);

fine processo;fine comportamentali;
 
Hi umair,
Check out il codice qui sotto non posso ottimizzare ulteriormente!
Si prega di fare il suo primo test testate.
Hope this helps you!

Codice:

libreria IEEE;

IEEE.STD_LOGIC_1164.ALL uso;

IEEE.STD_LOGIC_ARITH.ALL uso;

IEEE.STD_LOGIC_UNSIGNED.ALL uso;entità alluminio è

Port (a: in std_logic_vector (15 downto 0);

b: in std_logic_vector (15 downto 0);

CIN: in std_logic;

op: in std_logic_vector (1 downto 0);

c: out std_logic_vector (15 downto 0);

giudice: in std_logic;

OFL: out std_logic);

fine alluminio;architettura comportamentale è di alluminio

segnale b_int: std_logic_vector (15 downto 0);

segnale cy_int: std_logic_vector (15 downto 0);

segnale cin_int: std_logic;

iniziare

cin_int <= op (1) e CIN;

b_int <= a xor b xor (op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op ( 0) e op (0) & op (0) & op (0) & op (0));

cy_int (0) <= cin_int quando b_int (0) ='1 'altro uno (0);

cy_int (1) <= cy_int (0) quando b_int (1) ='1 'altro uno (1);

cy_int (2) <= cy_int (1) quando b_int (2) ='1 'altro uno (2);

cy_int (3) <= cy_int (2) quando b_int (3) ='1 'altro uno (3);

cy_int (4) <= cy_int (3) quando b_int (4) ='1 'altro uno (4);

cy_int (5) <= cy_int (4) quando b_int (5) ='1 'altro uno (5);

cy_int (6) <= cy_int (5) quando b_int (6) ='1 'altro uno (6);

cy_int (7) <= cy_int (6) quando b_int (7) ='1 'altro uno (7);

cy_int (8) <= cy_int (7) quando b_int (8) ='1 'altro uno (8);

cy_int (9) <= cy_int (8) quando b_int (9) ='1 'altro uno (9);

cy_int (10) <= cy_int (9) quando b_int (10) ='1 'altro uno (10);

cy_int (11) <= cy_int (10) quando b_int (11) ='1 'altro uno (11);

cy_int (12) <= cy_int (11) quando b_int (12) ='1 'altro uno (12);

cy_int (13) <= cy_int (12) quando b_int (13) ='1 'altro uno (13);

cy_int (14) <= cy_int (13) quando b_int (14) ='1 'altro uno (14);

cy_int (15) <= cy_int (14) quando b_int (15) ='1 'altro uno (15);c <= (cy_int (14 downto 0) & cin_int) xor b_int;

cout <= cy_int (15);

OFL <= cy_int (14) xor cy_int (15);

fine comportamentali;

 
Non so VHDL molto bene,
in modo forse questo codice Verilog ti aiuterà.Xilinx ISE 8,1 sintetizzato con una 17-bit in un addsub Spartan-3.

Codice:

modulo superiore (a, b, cin, op, c, tribunale, OFL);

parametro = 16 bit;

input [bit-1: 0] a, b;

cin ingresso;

input [1:0] op / / 1 bit consente cin, bit 0 seleziona ADD

filo [bit: 0] = it & cin op [1];

uscita [bit-1: 0] c;

uscita tribunale, OFL;assegnare (tribunale, c) = op [0]?
(1'b0, a) (1'b0, b) cy: (1'b0, uno) - (1'b0, b) - cy;

assegnare OFL giudice ^ = a [i bit-1] ^ b [bit-1] ^ C [bit-1];

endmodule
 
Tutti i Xilinx Biblioteca unificata macro sono trattati come "scatole nere" da parte del
strumenti di sintesi.L'attuazione di tali modelli di componenti
è una ONG di file.Quando viene eseguito il Ngdbuild ONG file sono inclusi
per attuare adeguatamente il progetto.

Il messaggio "ADSU16 non trovato" può essere tranquillamente ignorato.

 
Non è possibile ignorare l'errore, e si lamenta XST abortisce:

ERRORE: HDLCompilers: 87 - "test.v" linea 5 Impossibile trovare il modulo / primitivo 'ADSU16'E si lamenta anche Modelsim abortisce:

** Errore: (vsim-3033) test.v (5):

un'istanza di 'ADSU16' fallito.
Il progetto unitario non è stato trovato.Codice di prova:
Codice:

alto modulo (a, b, s);

input [15:0] a, b;

output [15:0] s;ADSU16 u1 (. A (a),. B (b),. S (s));

endmodule
 
OK ho avuto il problema!
Per HDL, è deducibile ADSU16 piuttosto che istanziata.Se si lavora con
schemi solo allora si può istanziata ADSU16!

Il codice sotto lo farà .....
Plaese si riferiscono a http://toolbox.xilinx.com/docsan/xilinx5/data/docs/lib/lib0056_40.html
Codice:

modulo addsub16 (aggiungere, a, b, ci, somma, co, v);

ingresso aggiungere, CI;

input [15:0] a, b;

output [15:0] somma;

co di uscita;

uscita v;reg [15:0] somma;

reg v, co;

reg co_int, junk;sempre @ (uno o b o aggiungere o CI) cominciare

if (aggiungere) cominciare

(co_int, somma, spazzatura) = (a, CI) (b, 1'b1);

co = co_int;

altro fine iniziare

(co_int, somma, spazzatura) = (a, CI) - (b, 1'b1);

co = ~ co_int;

fine

v = co_int ^ somma [15] ^ a [15] ^ b [15];

fine / / sempre @ (uno o b o aggiungere o CI)

endmodule

 
Hai provato questo?ISE 7.1.04i e 8.1.01i sia creare un 17-bit di tolleranza, un 18-bit subtractor, e una fila di LUT (probabilmente uno MUX).Non
c'è niente
di sbagliato, logicamente con il codice, XST semplicemente non riconosce il addsub.

Il mio esempio crea una 17-bit addsub.

Naturalmente, i risultati potrebbero invertire con la prossima versione se ISE.

 
Sì hai ragione echo47!
Penso che abbiamo bisogno di fare qualcosa di simile .....
qui ho tradotto ADSU16 schemi!
lCodice:

ibrary IEEE;

IEEE.STD_LOGIC_1164.ALL uso;

IEEE.STD_LOGIC_ARITH.ALL uso;

IEEE.STD_LOGIC_UNSIGNED.ALL uso;entità alluminio è

Port (a: in std_logic_vector (15 downto 0);

b: in std_logic_vector (15 downto 0);

CIN: in std_logic;

op: in std_logic_vector (1 downto 0);

c: out std_logic_vector (15 downto 0);

giudice: in std_logic;

OFL: out std_logic);

fine alluminio;architettura comportamentale è di alluminio

componente MUXCY_D

porto (LO: fuori STD_ULOGIC;

O: out STD_ULOGIC;

CI: in STD_ULOGIC;

DI: in STD_ULOGIC;

S: in STD_ULOGIC);

fine del componente;componente MUXCY_L

porto (LO: fuori STD_ULOGIC;

CI: in STD_ULOGIC;

DI: in STD_ULOGIC;

S: in STD_ULOGIC);

fine del componente;componente MUXCY

porto (O: out STD_ULOGIC;

CI: in STD_ULOGIC;

DI: in STD_ULOGIC;

S: in STD_ULOGIC);

fine del componente;segnale b_int: std_logic_vector (15 downto 0);

segnale cy_int: std_logic_vector (15 downto 0);

segnale cy_int_14: std_logic;

segnale cin_int: std_logic;

iniziare

cin_int <= op (1) e CIN;

b_int <= a xor b xor (op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op (0) & op ( 0) e op (0) & op (0) & op (0) & op (0) & op (0));MUXCY_L_0: MUXCY_L porta mappa (cy_int (0), cin_int, uno (0), b_int (0));

MUXCY_L_1: MUXCY_L porta mappa (cy_int (1), cy_int (0), una (1), b_int (1));

MUXCY_L_2: MUXCY_L porta mappa (cy_int (2), cy_int (1), A (2), b_int (2));

MUXCY_L_3: MUXCY_L porta mappa (cy_int (3), cy_int (2), A (3), b_int (3));

MUXCY_L_4: MUXCY_L porta mappa (cy_int (4), cy_int (3), uno (4), b_int (4));

MUXCY_L_5: MUXCY_L porta mappa (cy_int (5), cy_int (4), uno (5), b_int (5));

MUXCY_L_6: MUXCY_L porta mappa (cy_int (6), cy_int (5), (6), b_int (6));

MUXCY_L_7: MUXCY_L porta mappa (cy_int (7), cy_int (6), uno (7), b_int (7));

MUXCY_L_8: MUXCY_L porta mappa (cy_int (8), cy_int (7), A (8), b_int (8));

MUXCY_L_9: MUXCY_L porta mappa (cy_int (9), cy_int (8), una (9), b_int (9));

MUXCY_L_10: MUXCY_L porta mappa (cy_int (10), cy_int (9), uno (10), b_int (10));

MUXCY_L_11: MUXCY_L porta mappa (cy_int (11), cy_int (10), uno (11), b_int (11));

MUXCY_L_12: MUXCY_L porta mappa (cy_int (12), cy_int (11), uno (12), b_int (12));

MUXCY_L_13: MUXCY_L porta mappa (cy_int (13), cy_int (12), uno (13), b_int (13));

MUXCY_D_14: MUXCY_D porta mappa (cy_int (14), cy_int_14, cy_int (13), uno (14), b_int (14));

MUXCY_15: MUXCY porta mappa (cy_int (15), cy_int (14), uno (15), b_int (15));c <= (cy_int (14 downto 0) & cin_int) xor b_int;

cout <= cy_int (15);

OFL <= cy_int_14 xor cy_int (15);

fine comportamentali;
 
così per forza pienamente
un'istanza adsu16 abbiamo alcuna opzione, ad eccezione, aggiungere un file di schema in progetto, mettere il simbolo adsu16 e io porti.generare funzionale HDL e instatiation modello ....??????

una macro è utilizzabile per la generazione dello schema, ma non molto ... hdl entrata maldestra decisione di Xilinx

ma non hanno considerato il FMAPs, RLOC e HU_SET contraints in adsu16, come possiamo utilizzare questi contraints per ottimizzare il posizionamento?

 
Questo
è vero, ma è anche vero per e 16, SUB16, CC16CLE, e molti altri dispositivi di vecchia biblioteca.Normalmente basta lasciare che il compilatore dedurre aritmetica, contatori, etc, perché di solito il sintetizzatore non piacevole ottimizzazione.(Tuttavia, abbiamo visto che è un po 'twitchy con addsub quando si utilizza il trasporto e la overflow.) L'unico motivo per cui ho voluto per istanziare il ADSU16 è stato quello di confrontare il comportamento è il mio codice di esempio.

Se si desidera limitare il dedurre addsub, si potrebbe mettere il suo codice in un nuovo modulo, e quindi limitare il modulo.

 

Welcome to EDABoard.com

Sponsor

Back
Top