草庐IT

Verilog语言入门学习(1)

Amelse 2023-05-27 原文

一、数字逻辑回顾:

数字电路中:组合逻辑、时序逻辑

组合逻辑:

时序逻辑:电路逻辑输出值跟当前的输入值和电路的当前状态有关;如何保存当前状态:需要有储存功能的cell,比如:Flip-Flop,Latch

逻辑值:在数字电路中,1个bit有四种状态(四值逻辑)

 数值的二进制表示:

 N比特的无符号二进制取值范围:[0,2N-1]

有符号数的二进制表示:(原码,反码,补码)

 数字电路系统一般使用补码表示数值,在数学上加减比较方便

数值的十六进制表示:二进制按照4BIT表示为十六进制

二、什么是Verilog?

Verilog是一种硬件描述语言:用程序设计语言来描述数字电路的功能,提高设计效率。早期数字电路设计是基于原理图输入的,类似电路板的PCB原理图设计

类似的硬件描述语言:

VHDL、SystemVerilog、Chisel

 三、Verilog语法:

可综合描述:综合tool能够把verilog描述转化(compile)成基本的数字电路底层cell(与或非gate,寄存器等)的描述。

assign y = a & b; 

不可综合描述:综合tool不能把verilog描述转换为基本的数字电路底层cell的描述。

$display(“hello word.\n”)

verilog设计仿真与实现:通过EDA tool,可以在计算机上对verilog设计的功能进行仿真。

常用的仿真工具(所有verilog描述):

1.Modelsim/Questasim(Mentor)

2.VCS(Synopsys)

3.NC-verilog(Candence)

数字电路设计方法学:

Bottom-Up:从底层cell开始,逐渐往上大家功能;

Top-Down:从底层结构,协议算法开始,向下逐步划分功能模块;再细分各功能模块的功能与IO

目前,基于verilog的数字电路谁通常使用Top-Down的设计方法。因为数字IP/IC的规模很大,需要先抽象思维再细化;verilog给数字电路的设计的抽象思维提供了一种设计开发语言,但是:数字设计和软件设计师不同的,需要Think in Hardware,写代码前需要先设计电路结构。

verilog的功能描述:

Top-Dowan描述数字电路功能:通过模块module的层次化设计,实现一个复杂的数字逻辑功能

 四、verilog语法详细介绍

标识符:

用于定义code中的各种名字,比如:信号,module,define,parameter;

标识符由:字符,数字,下划线组成;

首字母必须是字母或者下划线;

标识符是区分大小写的;

信号名字建议与信号功能相对应:rstn,clk_core,mem_cs,mem_we,mem_dout,mem_din,mem_addr;

关键字:


常用关键字:

 注释:

注释一行:以“ // ”开始,到行末;

注释多行:以“ /* ”开始,到“ */ ”为止的所有内容;

数据物理类型:

线性数据:用于连续赋值语句(assign)描述组合逻辑或者module间的信号连接线;

wire型:

wire      a;   //1bit位宽

wire  [3:0] b;  //4bit

wire  [7:0] c;  //8bit

assign  a = 1'b0;     //连续赋值语句

assign  c = 8'h5a;   //8bit的十六进制数

tri0/tri1 :带下拉、上拉电阻的线性,没有驱动时,会有默认的值0/1,一般综合代码不用;

tri0  s0;

tri1  [20:0]  s1;

寄存器类型:

用于过程赋值语句(always、initial)描述组合逻辑或者时序逻辑(寄存器);

wire [3:0]  din;

reg  [3:0]  d0;  //4bit

reg           d1;//1bit

initial begin   //过程赋值语句

     d1 = 0; #10;

     d1 = 1;

end

always(posedge clk)begin                   //clk端一般就是寄存器

   if(d1)    d0 <= din;

end

有关Verilog语言入门学习(1)的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  5. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  6. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  8. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  9. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  10. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

随机推荐