在Modelsim仿真中显示状态机名称

本文介绍了在Modelsim仿真环境中,如何将状态机的状态以名称形式而非数值显示在波形图上,包括在testbench中映射状态、重定义状态机编码和使用虚拟对象三种方法,便于查看和理解状态机的运行情况。
摘要由CSDN通过智能技术生成

经过网上的搜索及自己的实验,总结在Modelsim仿真中显示状态机名称的三种方法。下面以一个具体的实例进行讲解。

实例功能:引入状态机实现2分频,这里使用状态机完全只是为了说明如何在仿真中显示状态机名称。

状态转移图:

设计文件代码:

1 	module fsm(
2 		input clk,
3 		input reset_n,
4 		output reg clkout
5 	);
6 
7 	parameter ONE  = 2'b01,
8 			  ZERO = 2'b10;
9 				 
10	reg [1:0]state;
11
12	always@(posedge clk or negedge reset_n)
13	if(!reset_n)begin
14		state <= ONE;
15		clkout <= 1'b1;
16	end
17	else begin
18		case(state)
19			ONE:begin
20				state <= ZERO;
21				clkout <= 1'b0;
22			end
23			ZERO:begin
24				state <= ONE;
25				clkout <= 1'b1;
26			end
27		endcase
28	end
29
30	endmodule

testbench文件代码:


                
以下是水龙头开关的有限状态机的 VHDL 代码: ```vhdl entity FaucetFSM is port ( clk: in std_logic; input: in std_logic; output: out std_logic ); end entity; architecture Behavioral of FaucetFSM is type StateType is (Off, On); signal state: StateType := Off; begin process (clk) begin if rising_edge(clk) then case state is when Off => if input = '1' then state <= On; end if; output <= '0'; when On => if input = '0' then state <= Off; end if; output <= '1'; end case; end if; end process; end architecture; ``` 这个有限状态机包括两个状态:Off 和 On。每个时钟上升沿触发一个状态转移。如果状态为 Off,则在输入为 1 时转移到 On,并将输出设置为 0。如果状态为 On,则在输入为 0 时转移到 Off,并将输出设置为 1。 接下来,使用 ModelSim 进行仿真。首先,创建一个 testbench 文件 FaucetFSM_tb.vhd,其包含以下代码: ```vhdl entity FaucetFSM_tb is end entity; architecture Behavioral of FaucetFSM_tb is signal clk: std_logic := '0'; signal input: std_logic := '0'; signal output: std_logic; component FaucetFSM is port ( clk: in std_logic; input: in std_logic; output: out std_logic ); end component; begin uut: FaucetFSM port map ( clk => clk, input => input, output => output ); process begin for i in 0 to 10 loop input <= '1'; wait for 10 ns; input <= '0'; wait for 10 ns; end loop; wait; end process; process begin for i in 0 to 100 loop clk <= not clk; wait for 5 ns; end loop; wait; end process; end architecture; ``` 这个 testbench 文件,包含一个时钟信号 clk,一个输入信号 input,一个输出信号 output,以及一个 FaucetFSM 实例。在 process 1 ,每 20ns 改变一次输入信号 input。在 process 2 ,每 10ns 改变一次时钟信号 clk。 接下来,使用 ModelSim 编译并运行仿真。在仿真窗口,可以看到输出信号 output 在输入信号 input 发生变化时切换状态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值