0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

探究Modelsim仿真--波形状态机名称显示

FPGA开源工作室 来源:FPGA开源工作室 作者:leee 2021-07-23 15:04 次阅读

在通常的modelsim波形仿真中,状态机的显示为16进制,如 3‘h1。如下图所示str_cur为状态跳变信号

FPGA开源工作室

为了更加直观的以文本形式显示状态机的跳变,如自己定义的IDLE等,我们可以使用

virtual typevirtual function

状态机源文件:

//vending-machine// 2 yuan for a bottle of drink// only 2 coins supported: 5 jiao and 1 yuan// finish the function of selling and changing

module vending_machine ( input clk , input rstn , input [1:0] coin , //01 for 0.5 jiao, 10 for 1 yuan

output [1:0] change , output sell //output the drink );

//machine state decode parameter IDLE = 3‘d0 ; parameter GET05 = 3’d1 ; parameter GET10 = 3‘d2 ; parameter GET15 = 3’d3 ;

//machine variable reg [2:0] st_cur ;

//(1) using one state-variable do describe reg [1:0] change_r ; reg sell_r ; always @(posedge clk or negedge rstn) begin if (!rstn) begin st_cur 《= ‘b0 ; change_r 《= 2’b0 ; sell_r 《= 1‘b0 ; end else begin case(st_cur)

IDLE: begin change_r 《= 2’b0 ; sell_r 《= 1‘b0 ; case (coin) 2’b01: st_cur 《= GET05 ; 2‘b10: st_cur 《= GET10 ; endcase end GET05: begin case (coin) 2’b01: st_cur 《= GET10 ; 2‘b10: st_cur 《= GET15 ; endcase end

GET10: case (coin) 2’b01: begin st_cur 《= GET15 ; end 2‘b10: begin st_cur 《= IDLE ; sell_r 《= 1’b1 ; end endcase

GET15: case (coin) 2‘b01: begin st_cur 《= IDLE ; sell_r 《= 1’b1 ; end 2‘b10: begin st_cur 《= IDLE ; change_r 《= 2’b1 ; sell_r 《= 1‘b1 ; end endcase

default: begin st_cur 《= IDLE ; end

endcase // case (st_cur) end // else: !if(!rstn) end

assign sell = sell_r ; assign change = change_r ;

endmodule

仿真顶层文件:

`timescale 1ns/1ps

module tb_vending_machine;

reg clk; reg rstn ; reg [1:0] coin ; wire [1:0] change ; wire sell ;

//clock generating parameter CYCLE_200MHz = 10 ; // always begin clk = 0 ; #(CYCLE_200MHz/2) ; clk = 1 ; #(CYCLE_200MHz/2) ; end

//motivation generating reg [9:0] buy_oper ; //store state of the buy operation initial begin buy_oper = ’h0 ; coin = 2‘h0 ; rstn = 1’b0 ; #8 rstn = 1‘b1 ; @(negedge clk) ;

//case(1) 0.5 -》 0.5 -》 0.5 -》 0.5 #16 ; buy_oper = 10’b00_0101_0101 ; repeat(5) begin @(negedge clk) ; coin = buy_oper[1:0] ; buy_oper = buy_oper 》》 2 ; end

//case(2) 1 -》 0.5 -》 1, taking change #16 ; buy_oper = 10‘b00_0010_0110 ; repeat(5) begin @(negedge clk) ; coin = buy_oper[1:0] ; buy_oper = buy_oper 》》 2 ; end

//case(3) 0.5 -》 1 -》 0.5 #16 ; buy_oper = 10’b00_0001_1001 ; repeat(5) begin @(negedge clk) ; coin = buy_oper[1:0] ; buy_oper = buy_oper 》》 2 ; end

//case(4) 0.5 -》 0.5 -》 0.5 -》 1, taking change #16 ; buy_oper = 10‘b00_1001_0101 ; repeat(5) begin @(negedge clk) ; coin = buy_oper[1:0] ; buy_oper = buy_oper 》》 2 ; end end

vending_machine u_mealy ( .clk (clk), .rstn (rstn), .coin (coin), .change (change), .sell (sell));

//simulation finish always begin #100; if ($time 》= 10000) $finish ; end

endmodule // test

仿真脚本sim.do文件:

#Build a new libraryvlib work

#Switch to the emulation source file directory

vlog +acc “tb_vending_machine.v”vlog +acc “vending_machine.v”

#Start simulation

vsim -voptargs=+acc work.tb_vending_machine

#Add all the signals on the top layeradd wave *#do wave.do

virtual type { {0x00 IDLE} {0x01 GET05} {0x02 GET10} {0x03 GET15}} FSM_TYPEvirtual function {(FSM_TYPE)/tb_vending_machine/u_mealy/st_cur} state1add wave u_mealy/st_curadd wave -color pink /tb_vending_machine/u_mealy/state1

view structureview signalsrun -all

仿真结果如下

FPGA开源工作室

状态机二进制被文本所替代。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ModelSim
    +关注

    关注

    5

    文章

    174

    浏览量

    47099

原文标题:Modelsim仿真--波形状态机名称显示

文章出处:【微信号:leezym0317,微信公众号:FPGA开源工作室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用modelsim时的问题分析

    仿真对于FPGA设计来说至关重要,我们经常使用modelsim来进行功能仿真或者时序仿真,这样就需要将modelsim和设计软件(quart
    的头像 发表于 10-24 18:15 162次阅读
    使用<b class='flag-5'>modelsim</b>时的问题分析

    触发器和状态机的关系是什么

    触发器和状态机在数字电路设计中有着紧密的关系,它们共同构成了时序逻辑电路的基础,用于实现数据的存储、处理和传输。
    的头像 发表于 08-12 11:24 345次阅读

    如何在FPGA中实现状态机

    在FPGA(现场可编程门阵列)中实现状态机是一种常见的做法,用于控制复杂的数字系统行为。状态机能够根据当前的输入和系统状态,决定下一步的动作和新的状态。这里,我们将详细探讨如何在FPG
    的头像 发表于 07-18 15:57 442次阅读

    玩转Spring状态机

    说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是状态模式的一种实现,在介绍S
    的头像 发表于 06-25 14:21 864次阅读
    玩转Spring<b class='flag-5'>状态机</b>

    在Verilog中实现Moore型和Mealy型状态机的方法简析

    编写能够被综合工具识别的状态机,首先需要理解状态机的基本概念和分类。状态机(FSM)是表示有限个状态以及在这些状态之间转换的逻辑结构。
    的头像 发表于 05-01 11:38 1402次阅读

    最实用的Modelsim使用教程

    程序中调用被测试程序时给被测试程序起的名称,本例中为“DUT”,见下图。然后点OK。后面观察波形与前仿真步骤相同。 图18 添加.sdo文件 自动仿真和手动
    发表于 03-19 16:40

    什么是有限状态机?如何解决传统有限状态机状态爆炸」问题?

    有限状态机(Finite State Machine,简称FSM)是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列以及如何响应来自外界的各种事件。
    的头像 发表于 02-17 16:09 5944次阅读
    什么是有限<b class='flag-5'>状态机</b>?如何解决传统有限<b class='flag-5'>状态机</b>「<b class='flag-5'>状态</b>爆炸」问题?

    Verilog状态机+设计实例

    在verilog中状态机的一种很常用的逻辑结构,学习和理解状态机的运行规律能够帮助我们更好地书写代码,同时作为一种思想方法,在别的代码设计中也会有所帮助。 一、简介 在使用过程中我们常说
    的头像 发表于 02-12 19:07 3737次阅读
    Verilog<b class='flag-5'>状态机</b>+设计实例

    状态机该怎么监控

    状态机卡住的场景——通过状态跳转条件的DFX信号去判断卡住的原因
    的头像 发表于 01-15 10:03 382次阅读
    <b class='flag-5'>状态机</b>该怎么监控

    如何使用 ModelSim 进行设计仿真

    ModelSim为HDL仿真工具,我们可以利用该软件来实现对所设计的VHDL或Verilog程 序进行仿真,支持IEEE常见的各种硬件描述语言标准。可以进行两种语言的混合仿真,但 推荐
    发表于 01-14 09:47 0次下载

    Spring状态机的实现原理和使用方法

    说起 Spring 状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring 状态机就是状态模式的一种实现,在
    的头像 发表于 12-26 09:39 1850次阅读
    Spring<b class='flag-5'>状态机</b>的实现原理和使用方法

    SaberRD状态机建模工具介绍(二)状态机建模工具使用示例

    假设电阻阻值为r_normal,首先打开状态机建模工具,添加电阻端口,电阻端口包含贯通变量电流和跨接变量电压,使用分支型端口。
    的头像 发表于 12-05 09:53 915次阅读
    SaberRD<b class='flag-5'>状态机</b>建模工具介绍(二)<b class='flag-5'>状态机</b>建模工具使用示例

    SaberRD状态机建模工具介绍(一)什么是状态机建模

    状态机建模是使用状态图和方程式的手段,创建基于混合信号的有限状态机模型的一种建模工具。
    的头像 发表于 12-05 09:51 1594次阅读
    SaberRD<b class='flag-5'>状态机</b>建模工具介绍(一)什么是<b class='flag-5'>状态机</b>建模

    怎样单独使用modelsim仿真xilinx呢?

    直接在modelsim软件内执行.do文件进行仿真,不通过vivado调用modelsim,vivado仅用于生成IP核。
    的头像 发表于 12-04 18:26 1319次阅读
    怎样单独使用<b class='flag-5'>modelsim</b><b class='flag-5'>仿真</b>xilinx呢?

    状态机怎么上来就错了?怎么解决?

    状态机本身很简单,default也写了,然后进行仿真时看到了这样的波形
    的头像 发表于 12-04 10:43 349次阅读
    <b class='flag-5'>状态机</b>怎么上来就错了?怎么解决?