数字电路EDA综合设计verilog笔记(持续更新)


目录

1、常用组合电路模块的设计

1、基本门电路(常用3种描述方法)

2、译码器与编码器

(1)译码器(decoder)

(2)编码器(encoder)

2、常用时序电路模块的设计

1、D触发器

2、数据锁存器

3、实用电路设计


1、常用组合电路模块的设计

1、基本门电路
2、译码器与编码器
3、数据选择器
4、奇偶校验产生器

1、基本门电路(常用3种描述方法)

(1)调用门原语(元件例化)——必须明确电路内部逻辑关系;

(2)用assign连续赋值语句描述——写出逻辑表达式;

(3)用过程赋值语句描述——在always块内写出逻辑表达式;

过程赋值有两种:initial和always;initial用于写仿真测试文件;

@符后跟的是敏感列表(敏感信号);敏感信号分两类:电平信号、边沿信号;

2、译码器与编码器

(1)译码器(decoder)

  • 译码是编码的逆过程。其功能是将具有特定含义的⼆进制码进⾏辨别,并转换成控制信号,具有译码功能的逻辑电路称为译码器。如果有n个⼆进制选择线,则最多可译码转换成2n个数据。
  • 译码器:将输入的二进制代码翻译成相应的输出信号,以表示编码时所赋予原意的电路。
  • 多条件译码电路大多用case语句实现——只需知道真值表。

案例1:3-8译码器;

对3位输入信号进行译码,当输入信号表示数字几时,8位输出线的相应位为0其余位均为1


3-8译码器功能介绍:

  • 将输⼊的3位2进制数翻译成10进制的8位输出。
  • 3-8译码器输⼊是⼆进制。3只脚也就是3位⼆进制数。输⼊可以3位⼆进制数。3位⼆进制最⼤是111 也就是8。
  • 3-8译码器输出是8个脚,表⽰10进制。是根据输⼊的⼆进制数输出。如果输⼊是101 那么就是第5只脚⾼电平,表⽰⼆进制数是5。
  • 3-8线译码器是⼀种全译码器(⼆进制译码器)。全译码器的输⼊是3位⼆进制代码,3位⼆进制代码共有8种组合,故输出是与这8种组合⼀⼀对应的8个输出信号。
  • 译码器将每种⼆进制的代码组合译成对应的⼀根输出线上的⾼(低)平信号。
  • 3-8译码器真值如下所⽰:(A1、A2、A3分别为输入端,G1为使能端的高电平,Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7分别为输出端)

(2)编码器(encoder)

  • 编码器:将一个输入信号编码成一组二进制代码输出。
  • 优先编码器:有两个或两个以上的输入信号有效时只对优先级最高的信号进行编码的电路。
  • 利用if_else语句的分支具有先后顺序的特点,用if_else语句可方便地实现优先编码器。

案例2:8-3优先编码器;
输入为a、b、c、d、e、f、g、h,高电平有效,h的优先级最高。当输入中某些位为1时,只对优先级最高的那位编码,使输出等于其对应的编号(a~h对应编号为0~7)。

2、常用时序电路模块的设计

1、D触发器
2、数据锁存器
3、数据寄存器
4、移位寄存器
5、任意模加法/减法计数器

其中:

  • 双稳态包括(Q, Q');
  • 最常用触发器是:JK触发器、D触发器;(触发器根据特性方程、特性表分析其对应功能);
  • JK触发器功能:置0(01)、置1(10)、保持(00)、翻转(11);
  • D触发器功能:置0、置1;
  • n表示现态、n+1表示下一个状态(次态);

1、D触发器

通常有3种D触发器,用always块语句实现:
(1)最简单的D触发器(只有一个沿触发信号clk)

案例1:基本D触发器;

因为要对q赋值,所以定义为reg寄存器型;

只有上升沿时d赋值给q,其余时刻q的值处于保持状态,不变;

逻辑符号如下:


(2)带异步清0、异步置1端的D触发器
案例2:带异步清0、异步置1端的D触发器

  • 敏感信号:clk上升沿、set下降沿、reset下降沿;只要其中一个敏感信号有效,则进入begin开始执行;
  • 异步的体现:有多个边沿触发信号写在敏感信号列表;
  • 清零的优先级大于置1的优先级
  • S、R均代表低电平输入有效;(带⭕)

(3)带同步清0、同步置1端的D触发器
案例3:带同步清0、同步置1端的D触发器;

敏感信号列表只有一个值;else执行,将输入赋值给输出;

2、数据锁存器

案例1:电平敏感型的1位数据锁存器

module latch_1(q,d,clk);   //输入为d, clk,输出为q;
	output q;
	input d,clk;
	assign q=clk?d:q;
endmodule

仿真结果;

案例2:带置位和复位端的电平敏感型的1位数据锁存器

module latch_2(q,d,clk,set,reset);  //set置0端,reset置1端;
	output q;
	input d,clk,set,reset;
//reset为1则返回0给q,即清零;当reset=0并且set=1,则返回1给q; 
//当reset=0并且set=0并且clk=1,则将输入d返回给q;否则让q保持
	assign q=reset?0:(set?1:(clk?d:q));
endmodule

 仿真结果:

 

案例3:用always块语句描述的电平敏感型8位数据锁存器;

module latch_8(qout,data,clk);
	output[7:0] qout;
	input[7:0] data;
	input clk;
	reg [7:0] qout;
	always @(clk or data)  //敏感信号列表一般是输入;只要clk或data有效就进入执行
	  begin
	    if(clk) qout=data; //若clk为假,则保持(无需写出代码)
	  end
endmodule

仿真结果:

 

 

3、实用电路设计

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值