【IC设计】Verilog线性序列机点灯案例(三)(小梅哥课程)

这篇具有很好参考价值的文章主要介绍了【IC设计】Verilog线性序列机点灯案例(三)(小梅哥课程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明:案例和代码来自小梅哥课程,本人仅对知识点做做笔记,如有学习需要请支持官方正版。

该系列目录:

Verilog线性序列机点灯案例(一)
Verilog线性序列机点灯案例(二)
Verilog线性序列机点灯案例(三)
Verilog线性序列机点灯案例(四)

设计目标

使用8个拨码开关控制一个LED灯,每个拨码开关负责控制0.25秒的时间,开关为1时亮,开关为0时灭。
举例:
10101010就是亮0.25秒,灭0.25秒,如此循环
10111101就是亮0.25秒,灭0.25秒,亮1秒,灭0.25秒,亮0.25秒,如此循环

设计思路

counter0计数器每计数满0.25秒就向counter1计数器加1,
counter1计数器从0到7计数,
led灯根据当前counter1计数器的值,选中对应的拨码开关进行输出,用软件的写法就是
led = sw[counter1]

RTL及Testbench代码

RTL代码

module led_ctrl2(
    clk,
    rst_n,
    led_out,
    sw
);
    input clk;
    input rst_n;
    input [7:0] sw;
    output reg led_out;
    
    parameter MCNT = 12500_000 - 1;
    reg [26:0] counter0;
    
    //第一个always块负责counter0
    always@(posedge clk or negedge rst_n) begin
        if(!rst_n)
            counter0 <= 0 ;
        else if(counter0 == MCNT)
            counter0 <= 0;
        else
            counter0 <= counter0 + 1'd1;
    end
    
    reg [2:0] counter1;
    
    //第二个always块负责counter1
    always@(posedge clk or negedge rst_n) begin
        if(!rst_n)
            counter1 <= 0 ;
        else if(counter0 == MCNT) begin
            counter1 <= counter1 + 1'd1;
        end
        else
            counter1 <= counter1;
    end
    
    //第三个always块负责根据counter1决定led_out
    //每0.25秒切换一个拨码输出
    always@(posedge clk or negedge rst_n)
    if(!rst_n)
        led_out <= 0;
    else begin
        case(counter1)
            0:led_out <= sw[0];
            1:led_out <= sw[1];
            2:led_out <= sw[2];
            3:led_out <= sw[3];
            4:led_out <= sw[4];
            5:led_out <= sw[5];
            6:led_out <= sw[6];
            7:led_out <= sw[7];
            default:led_out <= led_out;
        endcase
    end
endmodule

Testbench代码

`timescale 1ns / 1ns
module tb_led_ctrl2();
    reg clk;
    reg rst_n;
    wire led_out;
    reg [7:0] sw;
    
    initial clk = 1;
    always #10 clk = ~clk;
    
    led_ctrl2 led_ctrl2_inst0(
        .clk(clk),
        .rst_n(rst_n),
        .sw(sw),
        .led_out(led_out)
    );
    defparam led_ctrl2.MCNT = 12500 - 1; 
    
    initial begin
        rst_n = 0;
        sw = 8'b1010_1010;
        #201;
        rst_n = 1;
        
        #4_000_000;
        sw = 8'b0000_0001;
        
        #4_000_000;
        sw = 8'b1111_0001;
        
        #20_000_000;
        $stop;
    end
endmodule

仿真结果

总结这两张图可以看出来,counter1是在每次counter0计满12499时进1,即counter1每个值维持的时间是counter0等于0~12499,是0.25s,而led_out依赖于counter1,比counter1延迟一拍,所以led_out每个值维持时间也是0.25秒,时序正确。
【IC设计】Verilog线性序列机点灯案例(三)(小梅哥课程),ic设计,fpga开发,数字ic设计,一生一芯,verilog,chisel
【IC设计】Verilog线性序列机点灯案例(三)(小梅哥课程),ic设计,fpga开发,数字ic设计,一生一芯,verilog,chisel

上板视频

Verilog线性序列机点灯案例(三)(小梅哥课程)文章来源地址https://www.toymoban.com/news/detail-850896.html

到了这里,关于【IC设计】Verilog线性序列机点灯案例(三)(小梅哥课程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)

    一个数码管有八个引脚,控制八段二极管的亮灭,用以显示需要的数字。 当有N个数码管时,一个一个控制的话需要N x 8 个引脚,消耗资源较多。 因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态显示的效果(动态显示周期20ms),只需N+8个引脚。节省了大量资源

    2024年02月04日
    浏览(44)
  • verilog实现I2C控制器 (小梅哥思路)----详细解析

    模块框图如下所示 输入输出信号: 整体的思路如下: 通过输入的命令组合,完成一次8字节数据的传输。定义了6种命令, WR 写数据请求 (6’b000_001) STA 起始位请求(6’b000_010) RD 读数据请求(6’b000_100) STO 停止位请求(6’b001_000) ACK 应答位请求(6’b010_000) NACK 无应答请求(

    2024年02月03日
    浏览(53)
  • Verilog设计_序列发生器

    一种序列信号发生器设计,周期性进行输出。 目录 一、序列发生器 二、代码实现 序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号,能产生这种信号的逻辑器件则称为序列发生器。在设计中有些时候会需用使用某些非常特殊的数字信号,一般情况下就将这

    2024年02月09日
    浏览(45)
  • 【FPGA教程案例98】数据处理1——基于FPGA的数据线性插值verilog实现,MATAB辅助验证

    FPGA教程目录 MATLAB教程目录 ---------------------------------------- 目录 1.软件版本 2.数据线性插值原理 3.数据线性插值的matlab仿真

    2023年04月09日
    浏览(37)
  • “01110”双输入口序列检测器的Verilog设计

    设计一个序列检测功能的时序电路,如图所示。其输入信号有clr、clk、A、 B,输出信号Z。其中clk为时钟信号, clr是低电平有效的异步复位信号,A、B是输入数据信号。有一个二进制串行数据D0D1D2D3……Dx,以两位为一组顺序送入电路,D0送入A,D1送到B,以此类推。电路检测此

    2024年02月12日
    浏览(43)
  • 【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|

    1.1 索引目的 本篇索引旨在 收藏CSDN全站中有关数字IC领域高价值文章 ,在数字芯片领域中,就算将架构,设计,验证,DFT,后端诸多岗位加在一起的数量,都不及软件类一个细分方向的岗位数量多,反映在社区氛围或是开源资料的丰富度而言,数字IC领域相较于软件/互联网领

    2024年02月03日
    浏览(120)
  • 初学Verilog语言基础笔记整理(实例点灯代码分析)持续更新~

    实例:点灯学习 刚接触 Verilog ,作为一个硬件小白,只能尝试着去理解,文章未完…持续更新。 参考博客文章: Verilog语言入门学习(1) Verilog语法 【 Verilog 】一文带你了解 Verilog 基础语法 - 子墨祭的文章 - 知乎 关于Verilog中的几种赋值语句 这里抄点,那里扣点,整理了一

    2024年02月07日
    浏览(46)
  • 15.1_使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测)

    序列检测器的逻辑功能: 序列检测是将一个指定的序列从数字码流中识别出来。本项目要检测的序列是:10010。 设X是“数字码流的输入”,Z是“检出标记输出”;高电平是“实现指定序列”;低电平是“没有发现指定序列”。码流如下表所示。 由上述码流可知:该序列检测

    2024年01月23日
    浏览(40)
  • 大数据期末课程设计实验案例:网站用户行为分析

    大数据课程实验案例:网站用户行为分析 案例目的 1.熟悉Linux系统、MySQL、Hadoop、HBase、Hive、Sqoop、R、Eclipse等系统和软件的安装和使用; 2.了解大数据处理的基本流程; 3.熟悉数据预处理方法; 4.熟悉在不同类型数据库之间进行数据相互导入导出; 5.熟悉使用R语言进行可视化

    2024年02月05日
    浏览(46)
  • 序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)

    目录 一、前言 二、状态机法和寄存器法 2.1状态机法 2.11 使用状态机检测“1001” 2.12 verilog代码 2.13 testbench 2.14仿真结果 2.2移位寄存器法 2.21 使用移位寄存器法检测1001 2.22 verilog代码 2.23 testbench 2.24仿真结果 三、重叠检测与非重叠检测(检测序列1001) 3.1重叠检测 3.11 重叠检测

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包