Intel Quartus Prime中Verilog读取.mif文件的$readmemh语法错误
解决Quartus中$readmemh读取MIF文件触发的Error(10170)语法错误
错误原因
$readmemh是Verilog仿真系统任务,仅支持读取纯十六进制格式的文件(如.hex),而MIF是Quartus专用的内存初始化文件,包含DEPTH、WIDTH、BEGIN等结构化语法,和$readmemh的预期格式完全不兼容。你的MIF文件首行的配置内容(比如以D/W开头的定义行)被$readmemh当作十六进制数据解析,因此触发首行附近的语法错误。此外你提供的Verilog代码缺少initial关键字,begin块没有合法的上下文,这也是潜在语法问题。
解决方案
方案1:转换MIF为HEX文件后用$readmemh读取
- 在Quartus中打开
sine3_test1.MIF文件 - 点击菜单栏
File -> Save As,在格式下拉框选择Hexadecimal (Intel-Format) File (*.hex),保存为sine3_test1.hex - 修改Verilog代码:
reg [7:0] memory[0:255]; initial begin $readmemh("sine3_test1.hex", memory); end
方案2:直接用Quartus综合属性绑定MIF文件
如果仅需综合后硬件使用初始化数据,可将MIF文件加入Quartus项目,通过综合属性绑定初始化:
reg [7:0] memory[0:255] /* synthesis ram_init_file = "sine3_test1.MIF" */;
这种方式由Quartus综合工具直接解析MIF完成内存初始化,无需使用$readmemh。
额外注意事项
- 确保文件存放在Quartus项目根目录,或在代码中指定正确的相对路径
- 若需仿真、综合阶段都使用初始化数据,优先选择方案1,因为
$readmemh可被仿真工具识别,HEX文件也能被Quartus综合调用
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

