FPGA学习笔记6-Quartus II中的TCL脚本(翻译)

本文介绍如何使用TCL脚本自动化Quartus II中的EDA设计流程,包括工程创建、编译及时序分析等操作,并提供实用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

议程
-TCL脚本在Quartus II中
-创建一个工程
-编译工程
-查看报告数据
-时序分析

TCL脚本的优势
-顾客分析
只提取你所需要的信息
-自动设置
在GUI界面中节省手动设置的步骤
其他的EDA设计软件的接口
-可重用性
能够更简单的管理维护以及获得相应文档

Quartus II支持TCL
-Quartus II软件提供了多方面的TCL支持
-四种可执行命令行包含编译TCL
-Quartus II的TCL API在14个Package中包含超过150个指令

TCL package
-TCL指令分组通过package的形式
-可用package的子集是被预加载的
减少内存占用
在TCL脚本中加载package是十分重要的
-不是所有的package都是能够在命令行中应用的
通过功能排列package
时序分析的package只能在quartus_tan上使用

package的通常用法

用法描述
::quartus::project 创建一个工程,进行设置
::quartus::flow编译工程,运行标准编译流程
::quartus::report连接报告表,创建一个标准的报告
::quartus::timing估算并且报告时序路径
::quartus::timing_report列出所有的时序路径

-加载package
load_package <name> [-version <version>]
::quartus::在这里可以被忽略的
需要被指定交替使用的package

::quartus::project -建立工程
-创建一个工程,进行设置
-一些常用的指令
工程和版本修订相关
project_new,project_open,project_close,create_revision,set_current_revision
一般设置
set_global_assignment,set_instance_assignment
特殊设置

set_location_assignment,set_input_delay,set_output_delay,

set_multicycle_assignment,create_base_clock,timegroup


::quartus::project 实例
-创建一个工程,进行设置
使用fir_filter教程文件
Example:

project_new fir_filter -revision filtref -overwrite
set_global_assignment -name FAMILY Cyclone
set_global_assignment -name DEVICE EP1C6F256C6
set_global_assignment -name BDF_FILE filtref.bdf
set_global_assignment -name TOP_LEVEL_ENTITY filtref
set_location_assignment -to clk Pin_G1
create_base_clock -fmax "100 MHZ" -target clk clocka
create_relative_clock -base_clock clocka -divede 2 \
-offset "500 ps" -target clkx2 clockb
set_multicycle_assignment -from clk -to clkx2 2
project_close


保存设置至QSF中

-设置不会全部自动存储在Quartus II的QSF(Quartus II的设置文件)中
-设置在使用前一定需要存储在QSFzhong
举例,在系统调用之前
-一些指令会自动存储在设置中
project_close,execute_flow,execute_moudle
-使用外部设置命令进行手动设置

外部设置方法
-通常使用在系统调用之前的命令行

例子:

project_open $project_name
set_global_assignments -name FAMILY Stratix
#Before calling quartus_map,save the FAMILY assignment
export_assignemnts
#Now call quartus_map
qexec "quartus_map $project_name"

-使用execute-moudle -tool map去替代qexec的设置自动保存

::quartus::flow -编译包
-编译工程并且运行命令流
-两种指令
execute_flow <flow name>
compile,check_ios,etc
execute_moudle -tool <tool>
map,fit,tan,etc

-Package不能默认的被加载
使用load_package于编译流程中任意一个指令之前

::quartus::flow 例子
-打开一个工程并且进行编译
在之前例子的基础上

例子:

load_package flow
project_open fir_filter -revision filtref
execute_flow -compile
project_close

-添加execute_flow -compile指令到之前的例子中
建立工程并且编译通过一个脚本

小测验
-编写一段脚本能够建立一个工程并且编译
-通过编译脚本来合并工程

测验答案

load_package flow
project_new_filter -revision filtref -overwrite
set_global_assignment -name FAMILY Cyclone
set_global_assignment -name DEVICE EP1C6F256C6
set_global_assignment -name BDF_FILE filtref.bdf
set_global_assignment -name TOP_LEVEL_ENTITY filtref
set_location_assignment -to clk Pin_G1
create_base_clock -fmax "100 MHz" -target clk clocka
create_relative_clock -base_clock clocka -divide 2\
-offset "500 ps" -target clkx2 clockb
set_multicycle_assignment -from clk -to clkx2 2
execute_flow -compile
project_close


::quartus::report -编译报告

-访问报告表单并且创建一个标准的报告
-一些通常被使用在报告上的指令
报告管理
load_report,unload_report,create_report_panel
关于报告的信息
get_report_panel_names,get_number_of_rows
访问报告数据
get_report_panel_row,get_report_panel_data,get_timing_analysis_summary_result

报告形式
-通过控件名字进行数据访问
-控件是按照层级进行排列的
-多重访问通过使用||标识符
<Folder Name> || <Panel Name>
-选择层级下的报告控件"Timing Analyzer || Timing Analyzer Settings"
-顶层报告不含有||
流程记录控件被命名为流程记录
-控件是列表化的
通过表格呈现
-行数通过数字标识,列通过姓名标识
-行数从零开始
-第零行含有列标题

获取报告例子
-row2 第二行
-row_name "Timing Models" 标题为“时序模型”
-col1 第一列
-col_name Setting 读取设置
通过TCL脚本读取第二行第一列的设置

例子:

get_report_panel_data -name "Timing Analyzer||Timing Analyzer Settings"\
-row_name "Timing Models" -col_name Setting


::quartus::report 例子
-列出每一个错误的时序
-采用列表概要时序分析的结果
--列出时序错误的栏目
-列出所有错误的时序的TCL脚本

例子:

load_package report
project_open fit_filter -revision filtref
load_report
set panel_name "Timing Analyzer||Timing Analyzer Summary"
set num_panel_rows [get_number_of_rows -name $panel_name]
for {set i 1} {$ < $num_panel_rows} {incr i}{
set summary_type [get_report_panel_data -name $panel_name \
-row $i -col_name Type]
if{[regexp {Clock Setup:(.*)}$summary_type match clk_name]}{
set num_failed_paths [get_report_panel_data -name $panel_name \
-row $i -col_name "Failed Paths"]
puts "Clock domain $clk_name has $num_failed_paths failing paths"
}
}
unload_report
project_close


小测验
-在编译时验证是否有遇到时序错误
假设项目是打开的
提示:多少时序错误会被遇到

答案

#Assume project is open;don't forget to load the report load_report
if {0==[get_report_panel_data -name \
{Timing Analyzer||Timing Analyzer Summary} \
-row_name {Total number of failed paths} \
-col_name {Failed Paths}]}{
puts "Design meets timing"
}else{
puts "Design does not meets timing"
}
unload_report


::quartus::timing 时序验证
-估算仿真并且报告时序验证
只能在quartus_tan中执行
-一些常用的指令
create_timing_netlist
report_timing
delete_timing_netlist


时序的网络表
-时序的网络表一定在报告之前创建
-创建通过指令create_timing_netlist
-选项
Minimum Timing Analysis
Specify Speed Grade of Target Part
Specify Post-Synthesis Netlist


一般时序报告的指令
-估算并且报告时序路径分析在FLY上
包含内存影响
能够报告设计中的任意部分路径
包含所有不含在时序报告表中的项目

-例子

report_timing -tsu
report_timing -clock_setup -clock_filter clk
report_timing -tpd -npaths 5


::quartus::timing 例子
-在两个文件中列出所有的时序错误的时序路径
默认是完整规模的时序分析
最小规模的时序分析

例子:

load_package timing
project_open fir_filter -revision filtref
create_timing_netlist
report_timing -clock_setup -src_clock_filter clk -clock_filter clkx2 \
-all_failures -file slow_corner_cross_domain_paths.txt
delete_timing_netlist
create_timing_netlist -fast_model
report_timing -clock_hold -src_clock_filter clk -clock_filter clkx2 \
-all_failures -file fast_corner_cross_domain_paths.txt
delete_timing_netlist
project_close


::quartus::timing_report -时序报告的package

-列出时序路径
能够使用在quartus_tan中以及GUI界面中
-一种指令
list_path
-在时序报告中报告时序路径
只应用于预估算时序路径中
非显性的时序路径不被报告
-相似的选项指令有report_timing

例子:

list_path -from inst4 -to inst5* -stdout


小测试
-在两种指令之间有什么不同
report_timing
list_path

答案
-list_path
只能够在时序分析控件面板上的时序路径
-report_timing
可以分析任意设计中的任意时序路径
-两种指令包含相似的选择

总结
-采用quartus II的TCL API指令
-通过一些例子来描述指令的用法

<think>好的,我现在需要帮助用户了解ModelSim的基本功能和用途。用户已经给出了一些引用内容,我需要结合这些引用以及之前的对话历史来组织回答。 首先,用户提到ModelSim的功能和使用场景,之前的回答已经分点列出,包括多语言支持、高效编译、跨平台兼容性、调试功能,以及使用场景如RTL仿真、FPGA验证、协同仿真和教学用途。用户现在想进一步了解ModelSim的简单介绍、功能、特点和使用场景,可能需要更简洁的总结。 检查引用内容,引用1提到ModelSim的学习笔记,包括简介、基本概念、操控方式、仿真流程和类型。引用2和3讨论了ModelSim的自动化脚本、版本更新以及与Quartus的集成。引用4和5涉及安装指南和功能特点,比如支持多语言、波形查看、覆盖率分析等。 用户的需求是简单介绍,所以需要整合这些信息,避免过于技术化。可能需要强调ModelSim作为HDL仿真工具的核心功能,如支持VHDL/Verilog,调试工具,仿真流程,以及与Quartus的集成。特点方面,易用性、灵活性和行业认可度。使用场景可以重复之前提到的RTL仿真、FPGA验证、教学等,但需要参考引用中的学术研究、工业设计等应用场景。 另外,用户希望回答结构清晰,分点列出,并添加相关问题。需要确保引用正确,比如引用2提到的自动化脚本,引用5中的多语言支持和覆盖率分析。同时,要避免重复之前回答的内容,可能需要用不同的表述方式,并补充新的信息,比如覆盖率分析在功能部分。 需要注意之前的回答中已经提到了部分内容,现在需要更精炼,同时确保引用来源正确。例如,在功能部分提到覆盖率分析时,需要引用5的支持。在特点部分,自动化脚本来自引用2,跨平台兼容性来自引用3。同时,安装指南在引用4和5中提到,但用户的问题是关于功能和用途,可能不需要涉及安装,但如果有相关信息可以简要提及。 最后,生成的相关问题要基于现有内容,比如如何创建项目、自动化脚本使用、与Quartus集成方法等。需要确保问题与回答内容相关,并引导用户进一步探索。</think>### ModelSim 简介与核心功能 ModelSim 是由 Mentor Graphics(现为 Siemens EDA)开发的硬件描述语言(HDL)仿真工具,主要用于数字电路设计的功能验证与时序分析。以下是其核心功能、特点及典型应用场景的总结: --- #### **一、核心功能** 1. **多语言支持** - 支持 VHDL、Verilog、SystemVerilog 等 HDL 语言,并能实现混合语言仿真[^5]。 - 示例:可同时仿真 VHDL 模块和 Verilog 模块的交互逻辑。 2. **高效仿真与调试** - 提供波形查看器(Waveform Viewer),直观展示信号时序变化[^5]。 - 支持断点调试、单步执行、变量监控等功能,帮助快速定位设计错误[^3]。 3. **自动化脚本支持** - 通过 Tcl 脚本(`.do` 文件)实现仿真流程自动化,例如自动编译代码、加载测试激励、运行仿真等[^2]。 - 示例脚本: ```tcl vlib work vlog design.v testbench.v vsim testbench add wave * run 1000ns ``` 4. **代码覆盖率分析** - 可统计语句覆盖率、分支覆盖率等,确保测试用例的完整性[^5]。 5. **与 EDA 工具集成** - 支持与 Quartus II、Vivado 等 FPGA 开发工具无缝对接,实现联合仿真[^5][^4]。 --- #### **二、核心特点** 1. **易用性强** - 图形界面友好,支持快捷键操作,新手可通过官方文档快速入门[^3][^1]。 2. **跨平台兼容性** - 支持 Windows、Linux 系统,编译后的代码可跨平台复用[^3]。 3. **高度灵活性** - 用户可自定义仿真参数、调试工具布局,适应不同规模项目需求[^3]。 4. **行业认可度高** - 被广泛用于工业设计、学术研究,尤其在 FPGA/ASIC 验证领域占据重要地位[^3]。 --- #### **三、典型使用场景** 1. **RTL 级功能验证** - 在综合(Synthesis)前验证设计逻辑的正确性,不涉及时序延迟[^1][^2]。 - 示例:验证一个 CPU 控制模块的状态机跳转逻辑。 2. **FPGA/ASIC 开发** -Quartus 等工具配合,完成从代码编写到硬件烧录的全流程验证[^4][^5]。 - 应用:通信协议(如 SPI、UART)的 FPGA 实现验证。 3. **嵌入式系统联合仿真** - 软硬件协同仿真,例如验证 FPGA 与嵌入式处理器(如 Nios II)的交互[^5]。 4. **教学与科研** - 高校常用 ModelSim 教授数字电路设计课程,因其操作直观且资源丰富[^3][^1]。 --- #### **四、示例:简单仿真流程** 1. 创建工程并添加设计文件(如 `counter.v` 和 `testbench.v`)。 2. 编写 Tcl 脚本自动化编译与仿真: ```tcl vlib work # 创建工作库 vlog counter.v # 编译设计文件 vsim testbench # 加载测试平台 add wave * # 添加所有信号到波形窗口 run 1000ns # 运行仿真 ``` 3. 通过波形窗口观察计数器信号变化,验证逻辑是否符合预期。 --- ### 相关问题 1. ModelSim 如何与 Quartus II 联合仿真?需要哪些配置步骤? 2. 在 ModelSim 中如何通过 Tcl 脚本实现自动化覆盖率分析? 3. ModelSim 的免费版本(Starter Edition)有哪些功能限制? 4. 如何利用 ModelSim 调试 SystemVerilog 中的断言(Assertions)? 通过上述功能与场景的整合,ModelSim 能够显著提升数字电路设计的验证效率与可靠性[^1][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值