FPGA verilog入门案例笔记一

       Verilog 是一种硬件描述语言(HDL),广泛应用于电子系统级(ESL)到寄存器传输级(RTL)的数字系统建模。

 

1. 模块(Module)

        Verilog 代码的基本单位是模块,它代表了一个硬件组件。一个模块可以包含端口(port)定义、输入/输出、变量、函数和过程等。

用法案例:一个简单的 LED 控制器模块



module led_controller(  
    input wire clk,     // 时钟信号  
    input wire reset,   // 复位信号  
    output reg led      // LED 输出  
);  
  
// 初始化 LED 为关闭状态  
initial begin  
    led = 0;  
end  
  
// 时钟驱动的逻辑  
always @(posedge clk or posedge reset) begin  
    if (reset) begin  
        // 如果复位信号为高,LED 关闭  
        led <= 0;  
    end else begin  
        // 否则,LED 状态切换  
        led <= ~led;  
    end  
end  
  
endmodule



 

2. 数据类型

    Verilog 支持多种数据类型,包括位(bit)、位向量(bit-vector)、逻辑(logic)、整数(integer)、实数(real)等。

用法案例:使用位向量和整数



module counter(  
    input wire clk,  
    input wire reset,  
    output reg [7:0] count  // 8位计数器  
);  
  
reg [7:0] temp;  
  
always @(posedge clk or posedge reset) begin  
    if (reset) begin  
        temp <= 0;  
    end else begin  
        temp <= temp + 1;  // 使用整数加法  
        if (temp == 255) begin  // 使用整数比较  
            temp <= 0;  
        end  
    end  
end  
  
assign count = temp;  // 将内部寄存器值赋给输出端口  
  
endmodule



3. 运算符

    Verilog 支持多种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。

用法案例:使用位运算符



module bit_manipulation(  
    input wire [7:0] a,  
    input wire [7:0] b,  
    output reg [7:0] result  
);  
  
always @(*) begin  
    // 使用位与、位或和位移运算符  
    result = (a & b) | (a << 2) | (b >> 1);  
end  
  
endmodule



4. 条件语句

Verilog 使用 if-else 和 case 语句来实现条件逻辑。

用法案例:使用 if-else 语句



module mux2to1(  
    input wire [1:0] sel,  
    input wire [7:0] a,  
    input wire [7:0] b,  
    output reg [7:0] out  
);  
  
always @(*) begin  
    if (sel == 2'b00) begin  
        out = a;  
    end else if (sel == 2'b01) begin  
        out = b;  
    end else begin  
        out = 8'hFF;  // 如果选择信号无效,输出高阻态或其他值  
    end  
end  
  
endmodule



5. 循环语句

      Verilog 支持 forwhile 和 repeat 循环语句,但通常只在 initial 和 always 块中的仿真模型中使用,而不是在硬件模型中。

6. 函数和任务(Functions and Tasks)

    Verilog 允许定义函数和任务来封装可重用的代码块。函数返回单个值,而任务可以返回多个值或没有返回值。

7. 实例化(Instantiation)

    在 Verilog 中,一个模块可以被其他模块实例化,从而构建更复杂的系统。

用法案例:实例化 LED 控制器和计数器



module system_top(  
    input wire clk,  
    input wire reset,  
    output wire led  
);  
  
// 实例化 LED 控制器和计数器模块  
led_controller led_ctrl(  
    .clk(clk),  
    .reset(reset),  
    .led(led)  
);  



8. 系统任务和函数(System Tasks and Functions)

    Verilog 提供了一组系统任务和函数,用于与仿真环境进行交互,例如读取或写入文件、显示消息等。常用的系统任务包括 $display$write 和 $readmemb 等。

用法案例:使用 $display 系统任务显示消息



module test_display;  
  
initial begin  
    $display("Hello, Verilog!");  
    #10 $display("This is a test message.");  
end  
  
endmodule



9. 时间控制(Timing Control)

    在 initial 和 always 块中,可以使用时间控制来模拟硬件的延迟或同步行为。例如,#10 表示等待 10 个时间单位的延迟。

10. 参数化设计(Parametric Design)

    Verilog 支持参数化设计,允许模块在实例化时接受参数,从而实现更灵活和可重用的设计。

用法案例:参数化计数器模块



module counter_param(#(parameter WIDTH = 8) // 默认宽度为 8 位  
    input wire clk,  
    input wire reset,  
    output reg [WIDTH-1:0] count  
);  
  
// ... 计数器逻辑 ...  
  
endmodule  
  
// 实例化时指定宽度为 16 位  
counter_param #(.WIDTH(16)) cnt16(  
    .clk(clk),  
    .reset(reset),  
    .count(count16)  
);



总结

    Verilog 是一种功能强大的硬件描述语言,支持从简单的逻辑门到复杂的数字系统的建模。通过掌握其基本语法和用法案例,我们可以使用 Verilog 来设计和模拟各种数字电路和系统。希望本文提供的内容能帮助你更好地理解和使用 Verilog。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器渲染优--防抖节流懒加载

合理选择css选择器 相比于.content-title-span&#xff0c;使用.content .title span时&#xff0c;浏览器计算样式所要花费的时间更多。使用后面一种规则&#xff0c;浏览器必须遍历页面上所有 span 元素&#xff0c;先过滤掉祖先元素不是.title的&#xff0c;再过滤掉.title…

SpringBoot接口防抖(防重复提交)

TOC 啥是防抖 所谓防抖&#xff0c;一是防用户手抖&#xff0c;二是防网络抖动。在Web系统中&#xff0c;表单提交是一个非常常见的功能&#xff0c;如果不加控制&#xff0c;容易因为用户的误操作或网络延迟导致同一请求被发送多次&#xff0c;进而生成重复的数据记录。要针对…

日语日期相关词汇

传统新式何月なんがつ何時なんじ何分なんぶん何秒なんびょういち一月いちがつ&#xff11;時いちじ&#xff11;分いっぷん&#xff11;秒いちびょうに二月にがつ&#xff12;時にじ&#xff12;分にふん&#xff12;秒にびょうさん三月さんがつ&#xff13;時さんじ&#xff1…

学习小心意——python的构造方法和析构方法

构造方法和析构方法分别用于初始化对象的属性和释放类占有的资源 构造方法_init_() 语法格式如下&#xff1a; class 类名:def __init__(self, 参数1, 参数2, ...):# 初始化代码self.属性1 参数1self.属性2 参数2# ... 示例代码如下 class Student:def __init__(self):s…

如何利用CXL技术突破内存墙?-2

为了解决这些问题&#xff0c;业界正积极寻求新的技术和标准&#xff0c;比如Compute Express Link (CXL)&#xff0c;它旨在通过提供标准化的高速互连来提高内存带宽、降低延迟&#xff0c;并简化内存扩展的软件集成&#xff0c;从而有效地打破内存墙的限制。 通过使用CXL&am…

【POSIX】使用regex进行正则匹配

正则表达式是很关键的一个工具&#xff0c;各种编程语言中均通用&#xff0c;务必掌握 给出Linux中man page给出的一个示例&#xff1a; #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <regex.h>#define ARRAY_SIZE(arr) (s…

Spring的@Async注解及其用途

Spring 的 Async 注解是 Spring Framework 4.2 版本引入的功能&#xff0c;它用于支持异步方法执行。当一个方法标注了 Async&#xff0c;Spring 会在一个单独的线程中调用该方法&#xff0c;从而不会阻塞主线程的执行。 Async 注解的用途&#xff1a; 提高性能&#xff1a;通…

uniapp3步使用goeasy完成本地消息推送

1.注册登录goeasy&#xff0c;下载测试demo 2.替换demo中main.js中的key 3.打包一个H5&#xff0c;一个自定义基座。 h5发消息&#xff0c;app收消息&#xff0c;然后创建消息通知就好了。记得打开app的消息通知 demo很简单&#xff0c;demo都跑通了&#xff0c;在搬到自己项目…

NAVICAT从MYSQL链接到ORCAL数据库

1、工具-选线 2、环境&#xff0c;将原有的mysql的oci.dll文件改为oracle的 3、新建连接 填写对应数据

axios拦截器

定义 在客户端通过axios发送请求或响应被 then 或 catch 处理前拦截它们。顾名思义&#xff0c;在axios发送请求之前在请求数据内添加条件或者验证&#xff0c;并通过函数返回错误。在收到服务器的响应数据进行返回&#xff0c;遇到无法响应的情况在catch之前拦截错误信息进行…

国产高边驱动HD70202Q替换英飞凌BTS7040-2

高边驱动也称之为高边开关&#xff0c;主要用于车内负载的驱动与开关&#xff0c;并对负载进行保护和诊断。高边驱动以高可靠性、灵活性、低功耗以及小型轻量等特点&#xff0c;正逐渐替代传统的保险丝、继电器等方案。 RAMSUN提供的HD70202Q车规级双通道智能高边驱动的输入控…

迈普 多业务融合网关 send_order.cgi 前台RCE漏洞复现

0x01 产品简介 迈普多业务融合网关是迈普通信技术股份有限公司自主研发的多业务无线融合网关&#xff0c;拥有融合网关功能、精准流控、上网行为管理、智能选路…等强大功能&#xff0c;并支持对接迈普云平台&#xff0c;实现远程运维和集中管理&#xff0c;很好的满足了医疗/…

python API自动化(Jsonpath断言、接口关联及加密处理)

JsonPath应用及断言 重要 自动化要解决的核心问题 &#xff1a;进行自动测试-自动校验&#xff08;进行结果的校验 主要能够通过这个方式提取数据业务场景&#xff1a;断言 、接口关联 {key:value}网址&#xff1a;附&#xff1a;在线解析 JSONPath解析器 - 一个工具箱 - 好用…

OSI/RM的网络体系结构

下面简要说明OSI/RM七层协议的主要功能。 1&#xff09;应用层 这是osi的最高层。这一层的协议直接为端用户服务&#xff0c;提供分布式处理环境。应用层管理开放系统的互联&#xff0c;包括系统的启动、维持和中止&#xff0c;并保持应用进程间建立连接所需的数据记录&#…

python-web应用程序-Django数据库-数据库表设计

python-web应用程序-Django数据库-数据库表设计 在models中创建一个类会自动对数据库进行管理&#xff0c;那么如何用类的声明来实现数据库表的设计呢&#xff1f; from django.db import models# Create your models here. class Department(models.Model):title models.Ch…

2024年【N2观光车和观光列车司机】考试报名及N2观光车和观光列车司机最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N2观光车和观光列车司机考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新N2观光车和观光列车司机最新解析题目及答案&#xff01;多做几遍&#xff0c;其实通过N2观光车和观光列车司机很简单。 1、【多…

delphi 语法3

简单类型共包括有六种类型&#xff1a;整型、字符型、布尔型、枚举类型、子界类型、实型。 除实型之外&#xff0c;其它五种类中每一种类型的值域(所有合法的值的集合)中值的数目有限 且其中的值排列有序&#xff0c;其每个值在值域中均有一个序数 n&#xff0c;其前后两个值的…

速盾:怎么查询cdn真实ip?

CDN&#xff08;内容分发网络&#xff09;是一种用于加速网站内容传输的技术&#xff0c;通过在全球各地建立分布式节点服务器来提供更快速的内容传输和更好的用户体验。然而&#xff0c;由于CDN的特殊设计&#xff0c;使得查询CDN真实IP地址变得相对困难。本文将介绍一些常见的…

使用system verilog进行流水灯和VGA打印字符

使用system verilog进行流水灯和VGA打印字符 目录 **使用system verilog进行流水灯和VGA打印字符****system verilog的优点****VGA程序编写**VGA 控制器模块字符生成模块顶层模块测试基准程序**效果** **流水灯程序设计****效果** **总结** system verilog的优点 面向对象编程…