
数电和Verilog基础
文章平均质量分 54
数电和Verilog基础内容,可以快速入门并掌握重点内容
程序员Marshall
IC工程师 健身教练
公众号:程序员Marshall 小马街头健身
展开
-
数电和Verilog-小结及作业
A.21 小结及作业小结到这里,关于数电和Verilog基础的内容就讲完了,对于快速入门并学习后面的课程内容已经足够了。总之,希望对零基础的同学有帮助,如果觉得讲得还不错,也欢迎分享本课程内容给其他需要的同学。你的分享,就是对我最大的支持,谢谢。作业给大家留了两个作业,也是数字芯片设计经常会看到的笔试题。如果本章节课程内容都认真学习并掌握的话,这两个作业应该也可以参照本章节课程内容自行完成。感兴趣的话可以拿来练练手,以提升学习效果。1、用有限状态机(FSM)实现101101的序列检测模块。原创 2022-05-28 11:53:27 · 283 阅读 · 0 评论 -
数电和Verilog-时序逻辑实例四:状态机(三段式描述)
A.20 时序逻辑实例四:状态机(三段式描述)什么叫做三段式描述的状态机?三段,可以理解为三个always程序块。(1)第一个always程序块采用同步时序逻辑电路描述状态转移。(2)第二个always程序块采用组合逻辑电路判断状态转移条件并描述状态转移规律。(3)第三个always程序块采用同步时序逻辑将结果寄存后输出。两者的区别是将原先第二个always程序块中对y和z的组合逻辑输出改为了第三个always块的时序逻辑的寄存输出。其实就这么简单,不少网络以及相关书籍上把它讲复杂了,甚原创 2022-05-27 21:30:00 · 4132 阅读 · 1 评论 -
数电和Verilog-时序逻辑实例四:状态机(两段式描述-行为级)
A.19 时序逻辑实例四:状态机(两段式描述-行为级)这里依然采用两段式描述,即:(1)第一个always程序块采用同步时序逻辑电路描述状态转移。(2)第二个always程序块采用组合逻辑电路判断状态转移条件并描述状态转移规律,同时组合逻辑输出结果。但是,这一次,我们不用像之前那样,又画状态转移图,又画卡诺图真值表的,这次我们简单点。设计模块这里的组合逻辑看起来更容易理解一点,写起来相对也更快。但是传统的卡诺图化简公式的方式和这里的按照行为逻辑来实现的方式都要掌握,两种方法结合才能解决实际原创 2022-05-27 21:30:00 · 451 阅读 · 0 评论 -
数电和Verilog-时序逻辑实例四:状态机(两段式描述-传统公式)
A.18 时序逻辑实例四:状态机(两段式描述-传统公式)什么叫做两段式描述的状态机?两段,可以理解为两个always程序块。(1)第一个always程序块采用同步时序逻辑电路描述状态转移。(2)第二个always程序块采用组合逻辑电路判断状态转移条件并描述状态转移规律,同时组合逻辑输出结果。卡诺图化简公式第二个always程序块中的组合逻辑电路会用到上一章节内容中化简后的公式,所以这里暂且列在这里。设计模块//文件路径:a.18/src/sell.vmodule sell(clk,r原创 2022-05-27 21:30:00 · 746 阅读 · 4 评论 -
数电和Verilog-时序逻辑实例四:状态机(过程分析)
A.17 时序逻辑实例四:状态机(过程分析)以一个经典的数字IC设计笔试题,自动饮料售卖机,来给大家做示例讲解。题目要求设计一个自动饮料售卖机,饮料10分钱,硬币有5分和10分两种,并考虑找零。(1)画出状态转移图,公式和卡诺图分析(2)使用Verilog实现(3)搭建测试平台做简单验证下面带着大家一步步地完成。设计过程第一步确定输入输出。A=1表示投入5分钱,B=1表示投入10分钱,Y=1表示弹出饮料,Z=1表示找零。第二步确定电路状态。S0表示售卖机里还没有钱币,S1表示已经原创 2022-05-27 21:30:00 · 2092 阅读 · 0 评论 -
数电和Verilog-时序逻辑实例三:计数器
A.16 时序逻辑实例三:计数器顾名思义,就是用来根据时钟边沿跳变来统计时钟周期数量的模块。设计模块//文件路径:a.16/src/counter.vmodule counter(clk,rst_n,load_enable,load_counter,dout); input clk; input rst_n; input load_enable; input[7:0] load_counter; output[7:0] dout; reg[7:0] counter;原创 2022-05-27 21:30:00 · 510 阅读 · 0 评论 -
数电和Verilog-时序逻辑实例二:移位寄存器
A.15 时序逻辑实例二:移位寄存器简单的单向移位寄存器,由低位向高位移动,可以通过load加载设定移位寄存器的初始值。设计模块//文件路径:a.15/src/shifter.vmodule shifter(clk,rst_n,load_enable,load_data,dout); input clk; input rst_n; input load_enable; input[7:0] load_data; output[7:0] dout; reg[7:0] shif原创 2022-05-27 21:30:00 · 545 阅读 · 0 评论 -
数电和Verilog-组合逻辑实例三:存储器
A.13 组合逻辑实例三:存储器什么是存储器?用于存储数据的地方,那要存储的话,至少就需要地址和数据,也就是说它至少要包括一个二维的数组类型的变量。设计模块//文件路径:a.13/src/memory.vmodule memory(enable,rw,addr,data); parameter ADDR_WIDTH = 8; parameter DATA_WIDTH = 16; parameter MEM_WIDTH = 256; input enable; input rw原创 2022-05-27 21:30:00 · 462 阅读 · 0 评论 -
数电和Verilog-组合逻辑实例二:加法器
A.12 组合逻辑实例二:加法器结构化描述半加器真值表abcarrysum0000010110011110逻辑电路图设计模块//文件路径:a.12/src/half_adder.vmodule half_adder(a,b,sum,carry); input a,b; output reg sum,carry; always@(a or b)begin sum = a ^ b;原创 2022-05-27 21:30:00 · 386 阅读 · 0 评论 -
数电和Verilog-时序逻辑实例一:触发器
A.14 时序逻辑实例一:触发器设计模块D触发器//文件路径:a.14/src/dff.vmodule dff(clk,din,dout); input clk; input din; output reg dout; always@(posedge clk)begin dout <= din; endendmodule带低电平复位的D触发器//文件路径:a.14/src/dff_rst.vmodule dff_rst(clk,rst_n,din,do原创 2022-05-27 21:30:00 · 484 阅读 · 0 评论 -
数电和Verilog-组合逻辑实例一:解码器
A.11 组合逻辑实例一:解码器什么是解码器?根据输入编码进行解码,解码输出的bit位中只有一个与其余位不一样。这里默认为2-4解码器。输入select输出z001110011101101011110111设计模块//文件路径:a.11/src/decoder.vmodule decoder(enable,select,z); //声明模块名以及端口列表 parameter SELECT_WIDTH = 2; //指定输入端select的位宽原创 2022-05-27 11:31:24 · 1143 阅读 · 0 评论 -
数电和Verilog-组合逻辑和时序逻辑
A.10 组合逻辑和时序逻辑电路数字逻辑电路中分为两种逻辑电路结构,分别是组合逻辑和时序逻辑,如下图所示:时序逻辑电路由时钟clk来进行控制,像心跳一样一拍一拍的通过上升沿或下降沿来进行数据的同步和寄存,而组合逻辑则是一些逻辑运算,比如与、或、非、异或等运算,根据运算的复杂度,其组合逻辑电路的路径延迟就不同,但需要满足时序逻辑电路的建立时间和保持时间。一般两组触发器之间就是组合逻辑电路,图上的运算过程大致是:data_in数据输入进来,然后通过寄存器寄存,然后经过一段组合逻辑进行运算,最后再通过一原创 2022-05-26 21:45:00 · 1099 阅读 · 0 评论 -
数电和Verilog-硬件描述的抽象级别
A.9 硬件描述的抽象级别对于硬件电路的描述的抽象级别从高到低分别为:(1)系统级(system)通常由C/C++/SystemC语言来描述。(2)算法级(algorithmic)通常由C/C++/SystemC/SystemVerilog语言来描述,复杂的算法通常还是使用C/C++/SystemC。(3)RTL级(RegisterTransferLevel)通常由Verilog HDL/VHDL/SystemVerilog/SystemC语言来描述,当前使用的最多的还是Verilog HDL原创 2022-05-26 21:45:00 · 674 阅读 · 0 评论 -
数电和Verilog-系统函数
A.7 系统函数同样只给大家讲相对比较常用的几个系统函数,对于后续课程内容的学习甚至实际工作的绝大部分场景来说已经足够了。$ display和$write将信息打印到屏幕。`timescale 10ns/1nsint a = 'd10;string s = "hello";$display("%t -> %s ,here a is %0d",$time,s,a);#10ns;$display("%t -> %s ,here a is %0h",$time,s,a);#1ns原创 2022-05-26 21:45:00 · 431 阅读 · 0 评论 -
数电和Verilog-宏定义
A.8 宏定义`define 定义全局参数`define DATA_WIDTH 8module reg[`DATA_WIDTH-1:0] data; //这相当于定义 reg[7:0] data; ...endmodule`include 文件包含示例://文件aaa.vmodule aaa(a,b,out); input a, b; output out; wire out; assign out = a^b;endmodule//文原创 2022-05-26 21:30:00 · 2376 阅读 · 0 评论 -
数电和Verilog-条件和循环语句
A.6 条件和循环语句条件语句if…else//只有ifif(a > b) 语句;//if..elseif(a > b) 语句1;else 语句2; //if...else if...elseif(a > b) 语句1;else if(a == b) 语句2;else 语句3;//多个语句时使用begin...endif(a > b) 语句1;else if(a == b)原创 2022-05-26 21:30:00 · 981 阅读 · 0 评论 -
数电和Verilog-赋值语句、结构语句和程序块
A.5 赋值语句、结构语句和程序块阻塞和非阻塞赋值语句阻塞赋值前面语句执行完,才可执行下一条语句。always @(posedge clk) begin b = a; c = b;end上面代码综合后产生1个触发器,在时钟clk上升沿到来时进行触发,此时会先将输入端a的值赋给输出端b,然后等待赋值完成后,将输出端b的新值再赋给c,最终相当于将a的值同时赋给了b和c。非阻塞赋值语句同时执行。always @( posedge clk ) begin b &原创 2022-05-26 21:30:00 · 395 阅读 · 0 评论 -
数电和Verilog-运算符
A.4 运算符基本运算符a + b //加法运算a - b //减法运算a * b //乘法运算a / b //除法运算a % b //取余运算位运算符//取反运算a = 'b1101;b = ~ a;//取反后b的值等于'b0010//按位或运算a = 'b0101;b = 'b1110;b = a | b;//按位或运算后,b值的为'b1111//按位与运算a = 'b0101;b = 'b1110;b = a & b;//按位或运算后,b值的为'b0100原创 2022-05-26 21:30:00 · 460 阅读 · 0 评论 -
数电和Verilog-数值及变量
A.3 数值及变量数值既然数字逻辑电路里面是做一些逻辑运算,那必须要有数字,那前面说的计算机中的”0“或”1“的数字如何表示呢?通常在现实生活中,我们说的数字都是十进制,但是在计算机中通常以二进制数存在,但也可以被表示成十进制和十六进制。比如说我们常说的十进制下的10这个数字,可以在Verilog中分别表示如下:十进制: 'd10 = 10^1 二进制: 'b1010 = 2^1 + 2^3十六进制: 'ha 注意前缀表示方式。还有这里没有列八进制,因为你几乎不会用到。所以,补充基础原创 2022-05-26 21:30:00 · 1055 阅读 · 0 评论 -
数电和Verilog-基础概念
A.2 基础概念本章节以简单的问答方式来帮助大家做快速的建立一些基础概念。能做到了解就好,感兴趣的话可以再找找相关书籍或视频进行进一步学习,刚开始有这些概念对于本课程的学习来说应该就足够了。(1)什么是模拟信号?现实的世界里我们接收到的信息,包括图像、声音和触摸的手感、温度等等,这些信息基本都是随着时间连续变化的信号,即模拟信号。这里的信息指的是其信号的幅度,或频率或相位随时间作连续变化。(2)什么是数字信号?对模拟信号在某一个时刻进行采样,如果采样的点足够密集(即采样频率足够的话),那么就可以原创 2022-05-26 21:30:00 · 734 阅读 · 0 评论 -
数电和Verilog-本章内容说明
Appendix A 【免费】数电和Verilog基础A.1 本章内容说明(1)本章节是给真正的零基础同学准备的,因为过来咨询的同学里有的在学习Verilog和数电时存在困难,所以为了照顾一下这些同学,也为了更好的学习本课程后面的内容,特别增加了本章节内容。(2)本章节内容同样采用视频+笔记的方式进行讲解,并提供源码供下载。视频部分近期会补齐。(3)本章节内容做了简化,仅对必要的基础部分进行讲解,对于入门以及后续内容的学习基础储备来说足够了。(4)本章节的内容是免费的,如果觉得讲得还不错,也欢迎分原创 2022-05-26 21:30:00 · 150 阅读 · 0 评论