Увеличивать целое число в случае состояния в verilog с yosys - PullRequest
0 голосов
/ 30 августа 2018

Не знаю, соответствует ли он стандарту Verilog-2005, но мне удалось скомпилировать следующий код с помощью «synplify pro» и «icarus verilog».

  integer fsm_step_number;

  always @(posedge clk or posedge rst)
    if(rst) begin
      pc <= 8'h00;
      wb_addr_o <= 8'h00;
      wb_wdat_o <= 8'h00;
      wb_stb_o  <= 1'b0;
      wb_cyc_o  <= 1'b0;
      wb_we_o   <= 1'b0;
      temt <= 1;
    end
    else begin
        fsm_step_number=1;
        case(pc)
                       fsm_step_number++: begin 
                          wb_addr_o <= UART_LSR;
                          wb_stb_o  <= 1'b1;
                          wb_cyc_o  <= 1'b1;
                          wb_we_o <= 1'b0;
                       end

                       fsm_step_number++: begin 
                          temt <= wb_rdat_i[6];
                          wb_stb_o  <= 1'b0;
                          wb_cyc_o  <= 1'b0;
                          wb_we_o <= 1'b0;
                       end
                 [...]
         endcase
 end

Увеличение целого числа fsm_step_number не работает ни с программой синтеза решетки (LSE), ни с Yosys. У меня есть синтаксическая ошибка с yosys:

yosys> read_verilog uart_ctrl_pre.v 
1. Executing Verilog-2005 frontend.
Parsing Verilog input from `uart_ctrl_pre.v' to AST representation.
ERROR: Parser error in line uart_ctrl_pre.v:74: syntax error, unexpected TOK_INCREMENT

Знаете ли вы, можно ли так думать с Yosys (увеличить целое число до состояния регистра)?

1 Ответ

0 голосов
/ 30 августа 2018

Оператор ++ находится в SystemVerilog, а не в Verilog. И я думаю, что инструменты синтеза требуют, чтобы либо case (выражение), либо список item: выражений были константами, но не позволяли обоим быть не константными выражениями.

...