远程FPGA虚拟实验平台用SystemVerilog HDL实现彩灯控制器

本文介绍了如何使用SystemVerilog在远程FPGA平台上实现彩灯控制器,包括状态机的设计和时钟分频。实验包含两种模式:简易彩灯五角星和彩灯时钟,通过状态转换、次态计算和输出逻辑控制彩灯显示。同时,文章提及了在编写代码时应注意的always_comb使用和变量赋值问题。
摘要由CSDN通过智能技术生成

前言:本次实验要交一个jvp,一个rbf,一个sv,主要是靠自己画一个好看的jvp来展示实验内容,代码没什么大用处。代码我给了两套:五角星和时钟,五角星就是十个灯版本的简易彩灯,时钟是带了个进位的不标准彩灯,五角星的jvp在原理里给了,自提。

原理

实验材料

在这里插入图片描述
材料给的彩灯控制器是一个三段式的状态机,即:
状态转换,包括复位和其他特殊状态,对state进行控制;
状态计算,对next_state进行控制;
输出逻辑,根据state来输出。
实验要求我们写三段的。而实验材料的具体状态图还是看慕课吧。

wire reset =  PB[0];
wire clk;  // =  PB[1];
wire direction = S[8];
/************* The logic of this experiment *************/
/* 对10MHz系统时钟进行分频,使用分频后的时钟作为移位寄存器的时钟。
   分频系数为10M,输出的clkout的频率为1Hz。 */
ClockDivider #(.RATIO(10000000)) divider_inst(.ClkIn(CLOCK), .Reset(reset), .ClkOut(clk));

// Finite State Machine
wire [7:0] pattern;
enum bit [3:0] {
   //枚举,state和next_state能有的四种状态
    STATE0   = 4'b0001,//用ont hot编码表示的状态,一串里就一个有效的一种编码,表示少还行,多了很长
    STATE1   = 4'b0010,
    STATE2   = 4'b0100,
    STATE3   = 4'b1000
} state, next_state;

always_ff @(posedge clk, posedge reset)//1.状态转换
begin
	if (reset)//复位,一个状态机得有个好的初始状态
		state <= STATE0;
	else
		state <= next_state;
end

always_comb//2.次态计算,这边用always_comb我个人觉得不太好,完全是仗着程序简单写的,最好还是指定变量
begin : set_next_state
    case (state)
    STATE0: begin
        if (direction==0)//确认是不是逆向的
            next_state = STATE1;
        else 
            next_state = STATE3;
        end
    STATE1: begin
        if (direction==0)
            next_state = STATE2;
        
  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值