por que não é synthesizable?

T

trurl

Guest
Oi, Alguém pode dizer por que o código a seguir não podem ser sintetizados? Xilinx diz sinal acc não podem ser sintetizados.
Code:
 biblioteca IEEE; IEEE.STD_LOGIC_1164.ALL uso; IEEE.STD_LOGIC_ARITH.ALL uso; entidade mac é Port (in1: no assinada (11 downto 0); in2: no assinada (11 downto 0); clk: em std_logic; rst: em std_logic; acc: fora assinado (23 downto 0)); end mac; arquitetura comportamental de mac é sinal de prod, reg: assinado (23 downto 0); iniciar o processo (clk, rst, IN1, IN2) soma variável: assinado (23 downto 0); começar prod
 
Descrever o tipo do dispositivo Xilinx é usado. A seguinte declaração:
Code:
 ... if (rst'event e rst = '0 ') then ...
pode ser o problema. Redefinir borda desencadeada não é, em vez implementet na maioria dos dispositivos de Xilinx. Seu projeto requer duas entradas, borda acionado para registo (primeira e clk). Tente com reset assíncrono. bis
 
Bis, obrigado. Desde que eu sou um novato, você poderia explicar o que é "reset assíncrono" é algo assim ... if (rst = '0 ') then ...
 
Eu tentei, não funcionou na minha experiência, pelo menos, :-(
 
mudar todos os sinais (assinado), a (std_logic e std_logic_vector) sinais .. e usar o IEEE assinado pacote no início do arquivo .. Tentar sintetizar e me alimentar BAQ com o que se u ..
 
Eu acho que bis_ está correto. A maioria dos flops, incluindo FPGA Xilinx flops, não tem um edge-triggered entrada de reset. Eu mudei o seu redefinir edge-triggered: [color = blue] if (rst'event e rst = '0 ') then [/color] para um nível comum sensível reset (assíncrono): [color = blue] if (rst = '0 ') then [/color] e agora ele sintetiza no ISE 9.1i.
 
Para echo47: Eu já tentei, ele sintetiza, mas com esta eu recebo formas de onda de errado no meu projeto. Obrigado na mesma.
 
[Quote = Trurl] Olá, Alguém pode dizer por que o código a seguir não podem ser sintetizados? Xilinx diz sinal acc não podem ser sintetizados.
Code:
 biblioteca IEEE; IEEE.STD_LOGIC_1164.ALL uso; IEEE.STD_LOGIC_ARITH.ALL uso; entidade mac é Port (in1: no assinada (11 downto 0); in2: no assinada (11 downto 0); clk: em std_logic; rst: em std_logic; acc: fora assinado (23 downto 0)); end mac; arquitetura comportamental de mac é sinal de prod, reg: assinado (23 downto 0); iniciar o processo (clk, rst, IN1, IN2) soma variável: assinado (23 downto 0); começar prod
 
Aqui está o código corrigido!
Code:
 biblioteca IEEE; IEEE.STD_LOGIC_1164.ALL uso; IEEE.STD_LOGIC_ARITH.ALL uso; entidade mac é Port (in1: no assinada (11 downto 0); in2: no assinada (11 downto 0); clk: em std_logic; rst: em std_logic; acc: fora assinado (23 downto 0)); end mac; arquitetura comportamental de mac é sinal de prod, reg: assinado (23 downto 0); começar prod
 
[Quote = nand_gates] aqui é corrigido código!
Code:
 biblioteca IEEE; IEEE.STD_LOGIC_1164.ALL uso; IEEE.STD_LOGIC_ARITH.ALL uso; entidade mac é Port (in1: no assinada (11 downto 0); in2: no assinada (11 downto 0); clk: em std_logic; rst: em std_logic; acc: fora assinado (23 downto 0)); end mac; arquitetura comportamental de mac é sinal de prod, reg: assinado (23 downto 0); começar prod
 
Para omara007: Obrigado. Eu adicionei IN1 e IN2 para a lista de sensibilidade, porque Xilinx estava dando avisos sobre eles faltando na lista.
 
[Quote = Trurl] Para omara007: Obrigado. Eu adicionei IN1 e IN2 para a lista de sensibilidade, porque Xilinx estava dando avisos sobre eles faltando na lista. [/Quote] ignorar esses avisos .. tente remover estas entradas ..
 
if (rst'event e rst = '0 ') then e elsif (clk'event e clk = '0'), então não pode ser usado em um processo!
 
Por favor, tente o código nand_gates postou e ignore qualquer aviso você começa .. em seguida, dizer-nos sobre os resultados onda
 
Eu acho que allways Xilinx sintetizar xx na declaração "if (xx'event e xx = '0 / 1 ')" como um pino clk do FlipFlop, há apenas um pino clk em uma célula FF. Então não deve haver duas declarações tais em um processo. Um processo de um domínio do relógio.
 
Para omara007: Eu tentei o código que você mencionou. As ondas estão errados, a unidade de mac não funciona corretamente. A razão de eu usar minha declaração (rst'event e rst = '0 ') é que eu preciso para gerar pulso automaticamente zerado. Desde que meu código não é synthesizable, pode ser que você poderia aconselhar como gerar um pulso rst curto entre dois pulsos clk periodicamente após um certo número de clk pulsos. Obrigado.
 
Tente projetar um contador simples (cnt) .. quando este contador conta dois ciclos de clock, afirmar um determinado sinal, vamos chamá-lo (xyz) .. Você pode usar o combinacional "quando" declaração para atribuir um valor de '1 'para o (xyz) quando o contador (cnt) é igual a (2) .. Depois que você pode usar este sinal em um "if" para forçar todos os outros sinais no projeto a ser ZERO .. mas não chamá-lo de redefinir ..
 

Welcome to EDABoard.com

Sponsor

Back
Top