五层住户电梯状态机-Verilog实现
2017-12-20 08:25
302 查看
最近在看精通Verilog HDL: IC设计核心技术实例详解
尝试写了一下第四章的一个练习题目;DC综合的网表功能也正常;
不过testbench比较简单,可能和真实场景有差别。
Mealy 状态机
testbench
尝试写了一下第四章的一个练习题目;DC综合的网表功能也正常;
不过testbench比较简单,可能和真实场景有差别。
Mealy 状态机
module elevator_fsm (//input clk,nrst,lamp, //output state, dbg_tflr ); //input input clk; input nrst; input [4:0] lamp; output wire [4:0] state; output wire [4:0] dbg_tflr; reg [4:0] cstate,nstate; reg [4:0] tflr; parameter FL1 = 5'b00001, FL2 = 5'b00010, FL3 = 5'b00100, FL4 = 5'b01000, FL5 = 5'b10000; assign state = cstate; assign dbg_tflr = tflr; //lamp is the request from different floors. always @(*) if (lamp >= FL5) tflr = FL5; else if (lamp >= FL4) tflr = FL4; else if (lamp >= FL3) tflr = FL3; else if (lamp >= FL2) tflr = FL2; else if (lamp >= FL1) tflr = FL1; else tflr = FL1; always @(posedge clk or negedge nrst) if (~nrst) cstate <= FL1; else cstate <= nstate; // always @(*) case (cstate) FL1: begin if (tflr != 1) nstate = tflr; else nstate = FL1; end FL2: begin if (tflr != 2) nstate = tflr; else nstate = FL2; end FL3: begin if (tflr != 3) nstate = tflr; else nstate = FL3; end FL4: begin if (tflr != 4) nstate = tflr; else nstate = FL4; end FL5: begin if (tflr != 5) nstate = tflr; else nstate = FL5; end default: nstate = FL1; endcase endmodule
testbench
`timescale 1ns/1ps `define depth 16 `define width 8 module top; integer seed = 6; reg clk,nrst,nrst_d; reg [4:0] button; wire [4:0] state; wire [4:0] dbg_tflr; always #20 clk =~clk; initial begin clk =0; nrst=1; nrst_d =1; #41 nrst =0; #85 nrst =1; #2000 $finish; end always @(posedge clk or negedge nrst) if (~nrst) button <= #1 1; else button <= $random; elevator_fsm fsm_inst(//input .clk(clk), .nrst(nrst), .lamp(button), //output .state(state), .dbg_tflr(dbg_tflr) ); initial begin $fsdbDumpfile("wave.fsdb"); $fsdbDumpvars(0,top); end endmodule
相关文章推荐
- 发一个用状态机实现的按键检测是VERILOG代码
- [试验]10010序列检测器的三段式状态机实现(verilog)
- 状态机(二):Verilog状态机实现
- verilog状态机实现的简单交通灯
- 10010序列检测器的三段式状态机实现(verilog)
- 同步FIFO和异步FIFO的Verilog实现
- 加法器的verilog实现(串行进位、并联、超前进位、流水线)
- 一种简单的频率测试方法及Verilog实现
- 数字电路设计之循环右移的verilog实现
- 实现FPGA Verilog HDL与NIOS II的通信数据交换——利用PIO实现通信
- 使用状态机(有穷自动机)实现 printf功能
- 简单UART的verilog实现
- TCP拥塞状态机的实现(上)
- Verilog实现千兆以太网传输
- verilog状态机格式
- 状态机实现的三种方法-C语言
- FPGA作为从机与STM32进行SPI协议通信---Verilog实现
- springboot【28】状态机的实现-Spring StateMachine框架
- verilog实现乘法器
- 19使用推模式和拉模式实现电梯超重报警