ajudar com rtl exigem codificação ...........

U

umairsiddiqui

Guest
considerar este código ...
que é unidade de aritmética ALU:
suporta: ADD, SUB, ADC e SBB
problema é que, dado exigir código 17bit subtractor, 16-bit componente, e 16-bit componente com carry-in.por favor ajude a forma de reduzir este tamanho ...

<img src="http://www.edaboard.com/images/smiles/icon_confused.gif" alt="Confused" border="0" />
Código:library IEEE;

utilização IEEE.STD_LOGIC_1164.ALL;

utilização IEEE.STD_LOGIC_ARITH.ALL;

utilização IEEE.STD_LOGIC_UNSIGNED.ALL;entidade alumínio é

Porta (um: em std_logic_vector (15 virou 0);

b: em std_logic_vector (15 virou 0);

cin: em std_logic;

op: em std_logic_vector (1 virou 0);

c: out std_logic_vector (15 virou 0);

jurisdicional: out std_logic;

ofl: out std_logic);

final alumínio;Behavioral arquitetura de alumínio é

começoprocesso (a, b, cin, op)

variável c_select: std_logic;

a_temp variável,

b_temp,

c_temp: std_logic_vector (16 virou 0);começo

a_temp: = "0" e um;

b_temp: = "0" & b;

caso op (1) é

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

quando'1 '=> c_select: = cin;

quando outros => c_select: ='0 ';

final caso;

caso op (0) é

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

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

quando outros => c_temp: = (others =>'0 ');

final caso;

c <= c_temp (15 virou 0);

cout <= c_temp (16);

ofl <= c_temp (15) XOR c_temp (14);

processo final;final Comportamental;
 
Oi umair,
Confira abaixo o código não posso optimizar ainda mais!
Faça o seu primeiro teste testado.
Hope this helps you!

Código:

library IEEE;

utilização IEEE.STD_LOGIC_1164.ALL;

utilização IEEE.STD_LOGIC_ARITH.ALL;

utilização IEEE.STD_LOGIC_UNSIGNED.ALL;entidade alumínio é

Porta (um: em std_logic_vector (15 virou 0);

b: em std_logic_vector (15 virou 0);

cin: em std_logic;

op: em std_logic_vector (1 virou 0);

c: out std_logic_vector (15 virou 0);

jurisdicional: out std_logic;

ofl: out std_logic);

final alumínio;Behavioral arquitetura de alumínio é

sinal b_int: std_logic_vector (15 virou 0);

sinal cy_int: std_logic_vector (15 virou 0);

sinal cin_int: std_logic;

começo

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) & op (0) & op (0) & op (0) & op (0));

cy_int (0) <= cin_int quando b_int (0) ='1 'mais um (0);

cy_int (1) <= cy_int (0) quando b_int (1) ='1 'mais um (1);

cy_int (2) <= cy_int (1) quando b_int (2) ='1 'mais um (2);

cy_int (3) <= cy_int (2) quando b_int (3) ='1 'mais um (3);

cy_int (4) <= cy_int (3) quando b_int (4) ='1 'mais um (4);

cy_int (5) <= cy_int (4) quando b_int (5) ='1 'mais um (5);

cy_int (6) <= cy_int (5), quando b_int (6) ='1 'mais um (6);

cy_int (7) <= cy_int (6) quando b_int (7) ='1 'mais um (7);

cy_int (8) <= cy_int (7) quando b_int (8) ='1 'mais um (8);

cy_int (9) <= cy_int (8) quando b_int (9) ='1 'mais um (9);

cy_int (10) <= cy_int (9) quando b_int (10) ='1 'mais um (10);

cy_int (11) <= cy_int (10), quando b_int (11) ='1 'mais um (11);

cy_int (12) <= cy_int (11) quando b_int (12) ='1 'mais um (12);

cy_int (13) <= cy_int (12) quando b_int (13) ='1 'mais um (13);

cy_int (14) <= cy_int (13) quando b_int (14) ='1 'mais um (14);

cy_int (15) <= cy_int (14) quando b_int (15) ='1 'mais um (15);c <= (cy_int (14 virou 0) & cin_int) XOR b_int;

cout <= cy_int (15);

ofl <= cy_int (14) XOR cy_int (15);

final Comportamental;

 
Não sei VHDL muito bem, talvez este código Verilog vai te ajudar.Xilinx ISE 8/1 é sintetizado com um 17-bit addsub numa Spartan-3.

Código:

módulo superior (a, b, cin, op, c, tribunal, ofl);

parâmetro bits = 16;

entrada [bits-1: 0] a, b;

input cin;

input [1:0] op; / / bit 1 ativa cin, bit 0 seleciona ADD

fio [bits: 0] = cy cin & op [1];

saída [bits-1: 0] c;

saída tribunal, ofl;atribuir (tribunal, c) = op [0]?
(1'b0, a) (1'b0, b) cy: (1'b0, um) - (1'b0, b) - cy;

atribuir ofl = um tribunal ^ [bits-1] ^ b [bits-1] ^ c [bits-1];

endmodule
 
Todos Xilinx Unificado Biblioteca macros são tratados como caixas pretas pelo
ferramentas de síntese.A implementação de modelos para esses componentes
é uma ONG arquivo.Quando Ngdbuild é executado a ONG arquivos estão incluídos
à correcta execução do projecto.

A mensagem "ADSU16 não encontrado" pode ser ignorada com segurança.

 
Eu não posso ignorar o erro, e acusa XST abortar:

ERRO: HDLCompilers: 87 - "test.v" linha 5 Não foi possível encontrar o módulo / primitivas "ADSU16 'ModelSim também critica e abortar:

** Erro: (vsim-3033) test.v (5): instanciação de «ADSU16 'falhou.
A concepção unitária não foi encontrado.Código de ensaio:
Código:

módulo superior (a, b, s);

input [15:0] a, b;

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

endmodule
 
OK Eu tenho o problema!
Para HDL, ADSU16 é inferida e não instanciada.Se você estiver trabalhando com
Schematics só então você pode instanciados ADSU16!

O código abaixo irá fazer isso .....
Plaese referem-se a http://toolbox.xilinx.com/docsan/xilinx5/data/docs/lib/lib0056_40.html
Código:

módulo addsub16 (acrescentar, a, b, ci, soma, co, v);

entrada adicionar, CI;

input [15:0] a, b;

output [15:0] soma;

output co;

saída v;reg [15:0] soma;

v reg, co;

reg co_int, lixo;sempre @ (a ou b ou adicionar ou IC) começar

if (adicionar) começar

(co_int, soma, lixo) = (a, CI) (b, 1'b1);

co = co_int;

fim senão começar

(co_int, soma, lixo) = (a, ci) - (b, 1'b1);

co = ~ co_int;

fim

v = soma co_int ^ [15] uma ^ [15] ^ b [15];

finais / / sempre @ (a ou b ou adicionar ou IC)

endmodule

 
Você tentou isso?ISE 7.1.04i e 8.1.01i tanto criar um 17-bit adicional, uma 18-bit subtractor, e uma fila de Luts (provavelmente um MUX).Não há nada
de errado com o código logicamente, XST simplesmente não reconhece o addsub.

Meu exemplo cria um 17-bit addsub.

Evidentemente, os resultados poderiam reverter para a próxima versão se ISE.

 
Sim você é direito echo47!
Penso que precisamos de fazer algo assim .....
aqui traduzido ADSU16 esquemas!
lCódigo:

ibrary IEEE;

utilização IEEE.STD_LOGIC_1164.ALL;

utilização IEEE.STD_LOGIC_ARITH.ALL;

utilização IEEE.STD_LOGIC_UNSIGNED.ALL;entidade alumínio é

Porta (um: em std_logic_vector (15 virou 0);

b: em std_logic_vector (15 virou 0);

cin: em std_logic;

op: em std_logic_vector (1 virou 0);

c: out std_logic_vector (15 virou 0);

jurisdicional: out std_logic;

ofl: out std_logic);

final alumínio;Behavioral arquitetura de alumínio é

componente MUXCY_D

porto (LO: out STD_ULOGIC;

O: fora STD_ULOGIC;

IC: em STD_ULOGIC;

DI: em STD_ULOGIC;

S: em STD_ULOGIC);

componente final;componente MUXCY_L

porto (LO: out STD_ULOGIC;

IC: em STD_ULOGIC;

DI: em STD_ULOGIC;

S: em STD_ULOGIC);

componente final;componente MUXCY

porto (P: out STD_ULOGIC;

IC: em STD_ULOGIC;

DI: em STD_ULOGIC;

S: em STD_ULOGIC);

componente final;sinal b_int: std_logic_vector (15 virou 0);

sinal cy_int: std_logic_vector (15 virou 0);

sinal cy_int_14: std_logic;

sinal cin_int: std_logic;

começo

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) & op (0) & op (0) & op (0) & op (0) & op (0));MUXCY_L_0: MUXCY_L porto mapa (cy_int (0), cin_int, um (0), b_int (0));

MUXCY_L_1: MUXCY_L porto mapa (cy_int (1), cy_int (0), um (1), b_int (1));

MUXCY_L_2: MUXCY_L porto mapa (cy_int (2), cy_int (1), um (2), b_int (2));

MUXCY_L_3: MUXCY_L porto mapa (cy_int (3), cy_int (2), um (3), b_int (3));

MUXCY_L_4: MUXCY_L porto mapa (cy_int (4), cy_int (3), um (4), b_int (4));

MUXCY_L_5: MUXCY_L porto mapa (cy_int (5), cy_int (4), um (5), b_int (5));

MUXCY_L_6: MUXCY_L porto mapa (cy_int (6), cy_int (5), um (6), b_int (6));

MUXCY_L_7: MUXCY_L porto mapa (cy_int (7), cy_int (6), um (7), b_int (7));

MUXCY_L_8: MUXCY_L porto mapa (cy_int (8), cy_int (7), um (8), b_int (8));

MUXCY_L_9: MUXCY_L porto mapa (cy_int (9), cy_int (8), uma (9), b_int (9));

MUXCY_L_10: MUXCY_L porto mapa (cy_int (10), cy_int (9), um (10), b_int (10));

MUXCY_L_11: MUXCY_L porto mapa (cy_int (11), cy_int (10), um (11), b_int (11));

MUXCY_L_12: MUXCY_L porto mapa (cy_int (12), cy_int (11), um (12), b_int (12));

MUXCY_L_13: MUXCY_L porto mapa (cy_int (13), cy_int (12), um (13), b_int (13));

MUXCY_D_14: MUXCY_D porto mapa (cy_int (14), cy_int_14, cy_int (13), um (14), b_int (14));

MUXCY_15: MUXCY porto mapa (cy_int (15), cy_int (14), um (15), b_int (15));c <= (cy_int (14 virou 0) & cin_int) XOR b_int;

cout <= cy_int (15);

ofl <= cy_int_14 XOR cy_int (15);

final Comportamental;
 
assim a força-plenamente instantiate adsu16 não temos nenhuma opção, exceto, adicionar um arquivo em esquemática projecto, colocar o adsu16 símbolo e io portos.gerar funcional e instatiation hdl modelo ....??????

uma macro é utilizável para inserção de esquemas, mas não hdl entrada ... muito desajeitado decisão por Xilinx

mas não tenham considerado a FMAPs, RLOC e HU_SET restrições em adsu16, como podemos utilizar essas restrições para otimizar o posicionamento?

 
Isso
é verdade, mas é verdade também para e 16, SUB16, CC16CLE, e muitos outros dispositivos antiga biblioteca.Normalmente você deixa o compilador inferir aritmética, contadores, etc, porque geralmente o sintetizador faz bonito otimização.(No entanto, temos visto que é um pouco afligem com addsub quando utilizam o transporte ea transbordamento.) A única razão pela qual eu quis instantiate a ADSU16 era compará-lo ao meu comportamento
do exemplo de código.

Se você quiser restringir o inferir addsub, você pode colocar seu código em um novo módulo e,
em seguida, constranger o módulo.

 

Welcome to EDABoard.com

Sponsor

Back
Top