尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【EDA软件】【联合Modelsim仿真使用方法】
背景业界EDA工具仿真功能是必备的例如Vivado自带仿真工具且其无需联合外部仿真工具当然也可以联合外部工具例如MoodelSim。FUXI没有独立的仿真功能需要联合第三方软件Modelsim是常用的第三方软件。方法一FUXI联合ModelSim1 添加testbench文件新建top_tb.v文件可以新建一个sim文件夹把tb文件保存在里面。Porject Manager-Add Sources-Add or create simulation sources-Create File创建top_tb.v创建后界面如图1图12 编写仿真代码并保存top.v只输出了led这个信号所以仿真代码比较简单如图1top.v代码如下所示// // // Company: // Engineer: // // Create Date: 05/14/2025 10:43:05 // Design Name: // Module Name: top // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // // module top #( parameter ADDR_WIDTH 10 , parameter DATA_WIDTH 16 )( output reg led ); localparam DEPTH (1 ADDR_WIDTH); localparam CNT_THD 11d10; wire inner_osc_clk ; // 80MHZ wire mcu_clk ; wire fpga_clk ; wire pll_locked ; wire sys_rst_n ; wire por_locked ; wire clk ; wire rst_n ; wire we ; wire [ADDR_WIDTH-1:0] addr ; wire [DATA_WIDTH-1:0] d_data ; wire [DATA_WIDTH-1:0] q_data ; reg [DATA_WIDTH-1:0] memory [DEPTH-1:0] ; reg [DATA_WIDTH-1:0] wr_data ; reg [DATA_WIDTH-1:0] rd_data ; reg [ADDR_WIDTH-1:0] wr_addr ; reg [ADDR_WIDTH-1:0] rd_addr ; wire wr_en ; wire rd_en ; reg [10:0] wr_cnt ; reg [10:0] rd_cnt ; reg we_1ff ; reg rd_en_1ff ; oscillator_v1 u_oscillator_v1( .clkout ( inner_osc_clk ) ); pll_v1 u_pll_v1( .clkin0 ( inner_osc_clk ), // i .locked ( pll_locked ), // o .clkout0 ( fpga_clk ), // o .clkout1 ( ) // o ); por_v1_1 u_por_v1_1( .O ( por_locked ) ); assign sys_rst_n pll_locked por_locked; assign clk fpga_clk; assign rst_n sys_rst_n; /*First Write*/ always (posedge clk or negedge rst_n) begin if (!rst_n) begin wr_cnt 11d0; end else if (wr_cnt CNT_THD) begin wr_cnt wr_cnt 1b1; end else; end /*Write Full, then Read*/ always (posedge clk or negedge rst_n) begin if (!rst_n) begin rd_cnt 11d0; end else if (rd_en (rd_cnt CNT_THD)) begin rd_cnt rd_cnt 1b1; end else; end assign we wr_cnt CNT_THD ? 1b1 : 1b0; assign wr_en (we (wr_cnt CNT_THD)) ? 1b1 : 1b0; assign rd_en ((~we) (rd_cnt CNT_THD)) ? 1b1 : 1b0; /*Memory Write Address Option*/ always (posedge clk or negedge rst_n) begin if (!rst_n) begin wr_addr {ADDR_WIDTH{1b0}}; end else if (wr_en) begin wr_addr wr_addr 1b1; end else; end /*Memory Read Address Option*/ always (posedge clk or negedge rst_n) begin if (!rst_n) begin rd_addr {ADDR_WIDTH{1b0}}; end else if (rd_en) begin rd_addr rd_addr 1b1; end else; end /*Set Write Data Value*/ always (posedge clk or negedge rst_n) begin if (!rst_n) begin wr_data {DATA_WIDTH{1b0}}; end else if (wr_en) begin wr_data wr_data 1b1; end else; end /*Memory Write Data Option*/ always (posedge clk or negedge rst_n) begin : MEM_WRITE integer i; if (!rst_n) begin for (i 0; i DEPTH; i i 1) begin memory[i] {DATA_WIDTH{1b0}}; end end else if (wr_en) begin memory[wr_addr] wr_data; end else; end /*Memory Read Data Option*/ always (posedge clk or negedge rst_n) begin if (!rst_n) begin rd_data {DATA_WIDTH{1b0}}; end else if (rd_en) begin rd_data memory[rd_addr]; end else; end always (posedge clk or negedge rst_n) begin if(!rst_n) begin we_1ff 1b0; rd_en_1ff 1b0; end else begin we_1ff we; rd_en_1ff rd_en; end end always (posedge clk or negedge rst_n) begin if(!rst_n) begin led 1b1; end else if (we) begin led 1b0; end else if ((~we_1ff) rd_en_1ff) begin if ((rd_data ^~ q_data)) begin led 1b1; end else begin led 1b0; end end end assign d_data wr_data; assign addr we ? wr_addr : rd_addr; assign ce ((wr_cnt CNT_THD) || (rd_cnt CNT_THD)) ? 1b1 : 1b0; emb_v1 emb_v1_SP ( .clk ( clk ), .rstn ( rst_n ), .ce ( ce ), // i .we ( we ), // i .a ( addr ), // i .d ( d_data ), // i .q ( q_data ) // o ); endmodule以上代码比较简单通过寄存器搭建Memory实现单端口RAM以此验证单端口RAM IP。3 设置仿真内容3.1 设置Modelsim路径Options-Simulation-ModelSim Path路径为Modelsim的安装路径一般为XXXX\Modelsim_10.5\win643.2 设置Test Bench的Module nameOptions-Simulation-ModelSim Path-Top Module Name of Test Bench填写Module name3.3 设置Design Top的Module nameOptions-Simulation-ModelSim Path-Instance Name of Design Top Module填写Module name3.4 设置Test Bench FilesOptions-Simulation-ModelSim Path-Test Bench Files添加编写的仿真文件。3.5 设置Modelsim *.do FileOptions-Simulation-ModelSim Path-Modelsim *.do File添加*.do文件。暂时不好使不推荐使用。设置结果如图2图24 开始仿真Flow-Simulation-RTL Simulation最后点击RTL Simulation如图3开始仿真。图3自动会联合Modelsim工具并弹出Modelsim的工具界面。5 缺点5.1 弹出界面后需要手动进行run -all或者点击按钮且没有固定的仿真时间需要手动停止5.2 弹出界面只有top_tb的信号需要手动自行添加信号再运行5.3 修改文件需要从新执行4比较浪费时间。6 优点FUXI可以很快的检查出文件的语法错误。方法二脚本构建 推荐与top_tb.v同级目录下添加三种文件如图4图41 files.f添加需要编译仿真的testbench、 DUTRTL文件内容如下top_tb.v //rtl 仿真 D:/02_Fuxi/2025-03-28-win64-rel-99/data/lib/p0_sim.v ../src/ip/pll_v1.v ../src/ip/por_v1_1.v ../src/ip/oscillator_v1.v ../src/ip/emb_v1.v ../src/top.v以上涉及1个问题需要知道仿真模型这个后续罗列出来。2 start.do汇总编译、波形设置的命令#Step 1: Create and Map the work lib vlib work vmap work work #Step 2: Compile all the files vlog -64 -sv acc -incr defineSIM -timescale 1ns/1ns -work work -f files.f -l rtl.log #Step 3: Start the simulator, log all waveforms, load wave file and run vsim -voptargsacc -sva defineSIM -c work.tb_top -l sim.log -wlfdeleteonquit #Step4: No need to add waveform signals in advance, like VCS, you can directly pull the signal to view the waveform. But it will consume computer storage space. log -r /tb_top/* #Step 5: Set the window types view wave view structure view signals #Step 6: Add signals or signals group to view wave add wave -divider System add wave -radix hexadecimal -group System lblock/sclk add wave -radix hexadecimal -group System lblock/rst_n add wave -divider Data add wave -radix hexadecimal -group Data lblock/In_data add wave -radix hexadecimal -group Data lblock/Out_data #Step 7: Set run Time run 20ms以上主要包含了7部分的设置。说明log -r /tb_top/*使用这条命令所有信号波形都可以生成缺点是会消耗本地的存储空间。3 批处理文件如run_sim.batecho pause ::删除Modelsim生成的相关文件 RD work /s /q DEL transcript vsim.wlf /q vsim -do start.do pause通过批处理文件调用start.do进行仿真。4 优点4.1 文件修改后只需要在Modelsim CLI界面执行do start.do4.2 编辑start.do添加需要观察的信号进行波形观察。5 缺点修改文件需要编译才能知道文件的语法有错误。因此可以联合FUXI通过检查语法当无语法错误后进行编译仿真。举例下图是结合方法1和方法2的优点对单端口RAM的仿真结果。例子连接待上传。Modelsim TCL 常用的命令重置仿真并清空波形restart -force ; # 强制重启仿真清空波形run -alldo *.do
RELATED

相关推荐

从零用MATLAB实现元胞自动机森林火灾模拟:规则、可视化与参数扫描

从零用MATLAB实现元胞自动机森林火灾模拟:规则、可视化与参数扫描

简介:基于元胞自动机的森林火灾模拟MATLAB代码包,面向本科、硕士阶段需要理解元胞自动机建模与仿真应用的教研学习者,可用于课程设计或算法演示。资源内含2个文件,包含一个实现森林火灾传播规则的MATLAB主程序以及对应的效果示意图…

📅 2026/9/20 23:16:47
合肥美的太阳能故障报修电话|加热慢上门排查|欧米到家服务热线

合肥美的太阳能故障报修电话|加热慢上门排查|欧米到家服务热线

太阳能热水器使用时间长了,容易出现不上水、水箱水位不准、水温升不上去、热水出得少、上水不停、仪表不显示、控制器报警、管道漏水、冬季冻堵、电加热不能使用等情况。尤其是合肥气候湿润、四季分明,多雨潮湿且冬季低温湿冷,部分家庭太阳能…

📅 2026/9/20 23:16:47
pandoc YAML 元数据块标量类型解析:数字与布尔值如何映射到 Meta 类型

pandoc YAML 元数据块标量类型解析:数字与布尔值如何映射到 Meta 类型

pandoc YAML 元数据块标量类型解析:数字与布尔值如何映射到 Meta 类型 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 导读 本篇文章围绕 pandoc 仓库中的命令测试用例 test/command/4819.md&…

📅 2026/9/20 23:16:47
MORE NEWS

更多资讯

📰

Swagger UI Schema 校验与错误标记实战

Swagger UI Schema 校验与错误标记实战 【免费下载链接】swagger-ui Swagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API. 项目地址: https://gitcode.com/GitHub_Trending/s…

📰

力软框架7.0.2源码包部署与二次开发实战指南

简介:Long.Learun.Framework 7.0.2(即力软敏捷开发框架)是一套基于ASP.NET平台的C#敏捷开发框架源码包,主要面向需要快速构建Web应用并进行二次开发的.NET团队。压缩包共收录4366个文件,以C#后端代码(684个…

📰

大华Java SDK迁移SpringBoot完整实践:从库加载到设备管理

1. 迁移前的整体判断与方案选型 1.1 大华Java SDK到底是个什么东西 先聊一个基本认知问题。大华官方提供的Java SDK,表面上看是一堆 .jar 包加几个 .dll 或 .so 文件,但它的核心底层其实是C实现的native库,Java层通过JNA技术去调用。…

📰

python-sdk(MCP Python SDK)入门指南:从零搭建、运行与测试你的第一个 MCP Server

python-sdk(MCP Python SDK)入门指南:从零搭建、运行与测试你的第一个 MCP Server 【免费下载链接】python-sdk The official Python SDK for Model Context Protocol servers and clients 项目地址: https://gitcode.com/gh_mirrors/pytho…

📰

effect-smol HTTP服务器实战:从Hello World到生产就绪

effect-smol HTTP服务器实战:从Hello World到生产就绪 【免费下载链接】effect-smol Core libraries and experimental work for Effect v4 项目地址: https://gitcode.com/GitHub_Trending/ef/effect-smol effect-smol 是 Effect v4 的核心库仓库&#xff0…

📰

RapidOCR调优实操:3个参数让推理耗时减半

RapidOCR调优实操:3个参数让推理耗时减半 【免费下载链接】RapidOCR 📄 Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch. 项目地址: https://gitcode.com/GitHub_Tre…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬