Как правильно использовать блоки Always?

verilog fpga xilinx

213 просмотра

2 ответа

16 Репутация автора

Ниже приведен фрагмент кода, который я написал в verilog для XST. Журнал полон ошибок. Как мне исправить код? Как и где я использую always@()и @()блоки? Где я могу использовать блокирующие и неблокирующие назначения?

input wire CLOCK;
input wire [31:0] OUT_SQRT;
output wire [31:0] IN_SQRT;
input wire [31:0] RANDP;

integer randp;
integer flagp;
integer sqrootp;
integer check_primep;

always @(posedge CLOCK and flagp != 0)
begin
    #10
    @(posedge and flagp != 0 )
    begin
        flagp = sqrootp%check_primep;

        if(flagp != 0 and check_primep < sqrootp)
        begin
            check_primep = check_primep + 1;
        end

        @(posedge and flagp == 0)
        begin
            flagp = 1;
            check_primep = 2;
            randp = RANDP;
            #5
            IN_SQRT = randp;
            #10
            sqrootp = OUT_SQRT;
        end
end
Автор: gambhirprateek Источник Размещён: 04.07.2016 08:58

Ответы (2)


0 плюса

16482 Репутация автора

Триггер подразумевается с помощью:

always @(posedge clk) begin
  flip_flop_q <= flip_flop_d;
end

Чтобы сделать что-то синхронно (сэмплированное по часам), включите:

always @(posedge clk) begin
  if (flagp != 0) begin
    flip_flop_q <= flip_flop_d;
  end
end

Комбинаторная логика подразумевается с использованием:

always @* begin
  comb_logic = a + b;
end

Такие вещи, как следующие (задержки) не могут быть синтезированы:

#10
@(posedge and flagp != 0 ) // no always just a delay waiting for criteria

Часто используется в тестовых жгутах для ожидания сигналов сброса и т.д.

initial begin
  @(posedge reset_n);
  @(posedge clk);
  @(posedge clk);
  //begin test procedure
end

Если вам нужно дождаться сигнала в синтезируемом verilog, вам нужно создать FSM (конечный автомат) для последовательности вашей логики.

Автор: Morgan Размещён: 05.07.2016 01:27

0 плюса

128 Репутация автора

Вы задаете много вопросов в одном посте.

Возможно, лучшим для вас было бы закончить учебник по Verilog.

На сайте http://vol.verilog.com/ доступен бесплатный.

макинтош

Автор: Mac Размещён: 28.07.2016 06:45
32x32