2015-02-22 3 views
-1

Я не знаком с verilog. Я изо всех сил пытался его преобразовать.эквивалент VHDL для Verilog @ (posedge clk)

При моделировании часов происходит от '0' до 'x', что является странным. Я заподозрить эту часть, проблема

repeat(9) @(posedge clk); 
    DataIn_i <= 1'b1; 
    DataIn_q <= 1'b1; 
@(posedge clk); 
    FillSel <= 1'b0; 
    DataIn_i <= 1'b0; 
    DataIn_q <= 1'b0; 

здесь ссылки на обе скамейки.

Verilog скамейка - http://a.pomf.se/fvamqd.v VHDL скамейка - http://a.pomf.se/riolvf.vhd

любой вход приветствуется, спасибо заранее.

EDIT: Может кто-нибудь объяснить приведенный выше код verilog?

+1

Удалить ';' после '@ (posedge clk)'. – Qiu

ответ

5

Перевод Verilog's @posedge clk) в VHDL зависит от того, где он находится в постоянном или начальном блоке. Если это очень первая конструкция блока, вы можете сделать

Verilog:

always @(posedge signal) 
begin 
... 
end 

VHDL:

process(signal) 
begin 
    if rising_edge(signal) then -- Older VHDL if (signal'event and signal = '1') 
    ... 
    end if; 
end process; 

Когда встроенный в блок, используйте wait until заявление:

Verilog: @(posedge clk); 
VHDL: wait until rising_edge(signal); 

Verilog: forever ... 
VHDL:  loop ... end loop 

Verilog: repeat(n) ... 
VHDL: for i in 1 to n loop ... end loop; 

Обратите внимание, что когда я пишу ... для Verilog, то есть для следующего утверждения, или один начальный/конечный блок, который следует.

+0

Это было полезно. Любое понимание проблемы часов? – semiautomatic

+0

Предполагая, что вы знаете VHDL, что ваш clk_process должен делать так, как вы его написали? –

Смежные вопросы