十二 · 2021年11月12日

当SpinalHDL状态机遇到Quartus

曾经,一直觉得Xilinx家的Vivado难用,可当转战至Intel家的Quartus,蓦然觉得Vivado真香~

Spinal状态机

在使用SpinalHDL的状态机时,生成的Verilog代码里状态机中状态的定义全都是由宏定义来实现的。在真实的工程里,我们很少会讲所有的Verilog代码放在一个文件里。往往是一个模块一个文件(方式可参照文章《被忽略的两个Tips》)。以下面的代码为例:

4bce47056ccfe529476d333f62bc03c6.png

当采用oneFilePerComponent模式时,那么将会生成两个文件TopLevel.sv及enumdefine.sv。其中enumdefine.sv中将存放状态机中的宏定义:

`define fsm_enumDefinition_binary_sequential_type [1:0]
`define fsm_enumDefinition_binary_sequential_fsm_BOOT 2'b00
`define fsm_enumDefinition_binary_sequential_fsm_stateA 2'b01
`define fsm_enumDefinition_binary_sequential_fsm_stateB 2'b10
`define fsm_enumDefinition_binary_sequential_fsm_stateC 2'b11

在SpinalHDL里,工程中所有的宏定义均会放在文件enumdefine.sv中。

Quartus中宏定义

 

上面的代码没什么问题,但如何导入到quartus工程中去呢?

由于所有的宏定义均放置在了同一个enumdefine.sv文件下,那么能想到的第一个方式是通过将该文件制定为Verilog Header。在Quartus中,可通过下面的tcl指令来设置:

set_global_assignment -name VERILOG_INCLUDE_FILE ./enumdefine.sv
set_global_assignment -name SEARCH_PATH ./

这种方式添加没什么问题,但有问题的是在Quartus里所有引用宏定义的文件都要添加include enumdefine.sv。而很不凑巧的是SpinalHDL生成的TopLevel.sv文件并不会有include。当一个大型工程有大量的状态机模块时最终生成的Verilog文件再一个个手动去添加那就太费体力了。

在Quartus中还有一种添加宏定义的方式是通过下面的tcl语句:

set_global_assignment -name VERILOG_MACRO “SYNTHESIS”
set_global_assignment -name  VERILOG_MACRO “fsm_enumDefinition_binary_sequential_fsm_BOOT=2'b00”

通过这种方式添加可以避免再去修改生成的Verilog代码。我们在工程里基于Scala可以很方便的解析enumdefine.sv文件并生成对应的tcl脚本。值得注意的是在tcl里"[]"有特殊含义,需在生成tcl的代码里做字符串义:

set_global_assignment -name  VERILOG_MACRO "fsm_enumDefinition_binary_sequential_type=\[1:0\]"

Vivado宏定义  

在Vivado中完全没有上述的问题,将生成的文件直接导入到Vivado中并设置enumdefine.sv为Verilog Header即可。同样,在Vivado中可以通过下面的方式设置宏定义:

  • Add synthesis option "-verilog_define MACRO_NAME=MACRO_VALUE".
  • Define the Macros in one file, and set it as "Global Include" by right-clicking the file.
  • In Project Settings -> Language Options -> Generics/Parameters, you can override parameters but not macros of the design.

今天的第二栏只为一杯奶茶~

END

作者:玉骐
原文链接:https://mp.weixin.qq.com/s/PICQPdIXLBSlj7iMrR6TMw
微信公众号:
 title=

推荐阅读

更多SpinalHDL技术干货请关注Spinal FPGA专栏。
推荐阅读
关注数
1581
内容数
133
用SpinalHDL提升生产力
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息