数电第五周周结_by_yc

基本要点:

组合逻辑电路的行为特点、经典组合逻辑电路的设计、PPA优化

  • 组合逻辑电路设计要点:

      ①敏感变量列表应包含所有会影响输出的控制量;

      ②条件语句的完全描述,当电路中的条件语句未被完全描述,将会导致生成某一状态下对输出结果的锁存;

       - 在所有分支之前,添加赋值语句;

       - 在所有分支中对变量进行赋值。

      ③阻塞赋值:“=”,非阻塞赋值的“延时性”将会导致电路输出错误。若使用\({always@(*)}\)将会导致out_a和out_na的结果相同,这是由于将前述变量同样加入了敏感列表。\({\Rightarrow}\)鼓励多多使用\({always@(*)}\)

  • 组合电路中应避免产生latch!

      ①锁存器:电平触发的存储单元,当电平信号无效时,输出信号随输入信号变化,就像通过了缓冲器;当电平有效时,输出信号被锁存。

      ②latch危害:在实际电路中latch容易产生毛刺,导致下一级电路可能出现错误状态;生成latch需要更多的资源;锁存器的出现会使得静态时序分析变得更加复杂。

      ③避免产生latch的方法:

        A.if-else或case语句,结构保持完整;

        B.不要将赋值信号放在赋值源头或者条件判断中;

        C.敏感信号列表建议使用\({always@(*)}\)

  • 多路选择器:

//4选1多路选择器
module Multiplexer(
input a, b, c, d,
input s0, s1,
output reg y); always@(*) begin
if({s1,s0}==2'b00) y=a;
else if({s1,s0}==2'b01) y=b;
else if({s1,s0}==2'b10) y=c;
else if({s1,s0}==2'b11) y=d;
else y=1'bx;//省略将会带来latch
end endmodule

  • 比较器:
//2位比较器
module Comparator(
input in0, in1,
output reg gt, eq, lt); always@(*) begin
gt=0;
eq=0;
lt=0;
if(in0>in1) gt=1;
if(in0==in1) eq=1;
if(in0<in1) lt=1;
end endmodule
  • 编码器和译码器:
//8-3编码器
module encoder(
input [7:0] in,
output reg [2:0] encode_out,
output reg valid); always@(*) begin
valid=1;
case(in)
8'b00000001: encode_out = 3'b000;
8'b00000010: encode_out = 3'b001;
8'b00000100: encode_out = 3'b010;
8'b00001000: encode_out = 3'b011;
8'b00010000: encode_out = 3'b100;
8'b00100000: encode_out = 3'b101;
8'b01000000: encode_out = 3'b110;
8'b10000000: encode_out = 3'b111;
default : valid=0;
endcase
end endmodule
//3-8译码器
module decoder(
input [2:0] in,
output reg [7:0] out); always@(*) begin
case(in)
3'b000: out=8'b00000001;
3'b001: out=8'b00000010;
3'b010: out=8'b00000100;
3'b011: out=8'b00001000;
3'b100: out=8'b00010000;
3'b101: out=8'b00100000;
3'b110: out=8'b01000000;
3'b111: out=8'b10000000;
endcase
end endmodule
//8-3_priority_encoder
module priority_encoder(
input [7:0] din,
input EI,
output reg [2:0] dout,
output reg GS, EO); always@(*) begin
if(EI) begin dout=3'b111; GS=1; EO=1; end
else if(din[7]==0) begin dout=3'b000; GS=0; EO=1; end
else if(din[6]==0) begin dout=3'b001; GS=0; EO=1; end
else if(din[5]==0) begin dout=3'b010; GS=0; EO=1; end
else if(din[4]==0) begin dout=3'b011; GS=0; EO=1; end
else if(din[3]==0) begin dout=3'b100; GS=0; EO=1; end
else if(din[2]==0) begin dout=3'b101; GS=0; EO=1; end
else if(din[1]==0) begin dout=3'b110; GS=0; EO=1; end
else if(din[0]==0) begin dout=3'b111; GS=0; EO=1; end
else begin dout=3'b111; GS=1; EO=0; end
end
endmodule
  • 七段数码管:
//七段数码管
module hex_7seg_LED(
input [3:0] hex,
input dp,
output reg [7:0] sseg); always@(*) begin
case(hex)
4'h0: sseg=7'b0000001;
4'h1: sseg=7'b1001111;
4'h2: sseg=7'b0010010;
4'h3: sseg=7'b0000110;
4'h4: sseg=7'b1001100;
4'h5: sseg=7'b0100100;
4'h6: sseg=7'b0100000;
4'h7: sseg=7'b0001111;
4'h8: sseg=7'b0000000;
4'h9: sseg=7'b0000100;
4'ha: sseg=7'b0001000;
4'hb: sseg=7'b1100000;
4'hc: sseg=7'b0110001;
4'hd: sseg=7'b1000010;
4'he: sseg=7'b0110000;
4'hf: sseg=7'b0111000;
endcase
sseg[7]=dp;
end endmodule
  • PPA优化问题:PPA优化

  • 上机过程中出现的问题:

      ①定义寄存器时注意不要写成数组哈哈哈;

      ②for循环时️不要把起始和终止条件写反;

      ③使用for循环时最好将多语句块用begin...end包起来,因为for语句不会根据缩进来判断for循环是否结束。

数电第五周周结_by_yc的更多相关文章

  1. 模电&数电知识整理(不定期更新)

    模电总复习之爱课堂题目概念整理 Chapter 1 1) 设室温情况下某二极管的反偏电压绝对值为1V,则当其反偏电压值减少100mV时,反向电流的变化是基本不发生变化. 2) 二极管发生击穿后,在击穿 ...

  2. 数电课设——琐碎

    这几天没有更新过网站了,也没继续开发VellLock了,可是感觉还是没有闲着,一直在跟下面的一些元器件在打交道,当然下面的都是小儿科,英文文档都看得我快吐血了.数电基本属于棺材边上过的我,是各种头大, ...

  3. Android第五六周作业

    1.返回键实现对话框弹出是否退出应用程序 package com.example.zuoye1; import androidx.appcompat.app.AlertDialog; import a ...

  4. [问题2015S04] 复旦高等代数 II(14级)每周一题(第五教学周)

    [问题2015S04] 设 \(A\) 为 \(n\) 阶方阵, \(C\) 为 \(k\times n\) 矩阵, 且对任意的 \(\lambda\in\mathbb{C}\), \(\begin{ ...

  5. [问题2015S14] 复旦高等代数 II(14级)每周一题(第十五教学周)

    [问题2015S14]  设 \(J=\begin{pmatrix} 0 & I_n \\ -I_n & 0 \\ \end{pmatrix}\), \(A\) 为 \(2n\) 阶实 ...

  6. [问题2014A03] 复旦高等代数 I(14级)每周一题(第五教学周)

    [问题2014A03]  设 \(A=(a_{ij})\) 为 \(n\,(n\geq 3)\) 阶方阵,\(A_{ij}\) 为第 \((i,j)\) 元素 \(a_{ij}\) 在 \(|A|\) ...

  7. [问题2014A13] 复旦高等代数 I(14级)每周一题(第十五教学周)

    [问题2014A13]  设 \(V\) 是数域 \(K\) 上的 \(n\) 维线性空间, \(\varphi\) 是 \(V\) 上的幂零线性变换且满足 \(\mathrm{r}(\varphi) ...

  8. [问题2014S05] 复旦高等代数II(13级)每周一题(第五教学周)

    [问题2014S05]  设 \(A,B\) 分别是 \(4\times 3\) 和 \(3\times 4\) 实矩阵, \[ BA=\begin{pmatrix}-9 & -20 & ...

  9. [问题2014S15] 复旦高等代数II(13级)每周一题(第十五教学周)

    [问题2014S15]  设 \(O\) 为 \(n\) 阶正交阵,\(A=\mathrm{diag}\{a_1,a_2,\cdots,a_n\}\) 为实对角阵, 证明: 方阵 \(OA\) 的特征 ...

  10. [hihoCoder] 第五十周: 欧拉路·二

    题目1 : 欧拉路·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. 主角 ...

随机推荐

  1. 2021年3月-第01阶段-Linux基础-Linux系统概念-Linux命令

    Linux系统基本概念 图形界面: Ctrl+Shift +号 //调整命令终端变大 Ctrl - 号 //调整命令终端变小 命令终端: ~ 家目录:用户的私有场所,其他用户不能随便访问 root超级 ...

  2. 【学习笔记】 Adaboost算法

    前言 之前的学习中也有好几次尝试过学习该算法,但是都无功而返,不仅仅是因为该算法各大博主.大牛的描述都比较晦涩难懂,同时我自己学习过程中也心浮气躁,不能专心. 现如今决定一口气肝到底,这样我明天就可以 ...

  3. Python微服务实战

    文档地址:https://www.qikqiak.com/tdd-book/ GitHub地址:https://github.com/cnych/flask-microservices-users 源 ...

  4. MySQL集群搭建(1)-主备搭建

    数据库在任何业务中都是最重要的环节之一,这就对数据库架构提出的较高的要求.单点数据库永远不应该出现在生产环境,我们已经目睹过太多由于单点.备份缺失造成的损失,所以,搭建高可用 MySQL 集群是非常有 ...

  5. 面向制造企业普适性ERP、MES类产品为什么那么难找?

    标准化与个性化之间的矛盾怎么可能通过普适性的ERP.MES系统来解决?为什么难?就跟你找一套适合所有人穿的衣服一样难,事实上这个比找衣服更难!人与人之间高矮胖瘦各不相同.肤色体型各有差异,把同一套衣服 ...

  6. css百叶窗

    效果图: css代码块: <style> *{//默认样式清除 margin: 0; padding: 0; } .content{//设置外层div的宽高,超出后隐藏 margin: 1 ...

  7. Linux-->vi和vim编辑器的基本操作

    vim编辑器介绍 vi或者vim就是对linux下的文本进行编辑的一种编辑器比如说a.cpp文件这种 Linux会内置vi文本编辑器 Vim可以简单的认为vi的增强版 Linux是区分大小写的! 用法 ...

  8. 6.MongoDB系列之特殊索引和集合类型

    1. 地理空间索引及全文搜索 与Elasitcsearch一样,MongoDB同样支持地理空间索引及全文搜索,由于选型常用ES而非MongoDB此处略过 2. TTL索引 首先先了解下固定集合,其类似 ...

  9. 【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较

    前言:突然想打算把Rust作为将来自己主要的副编程语言.当然,主语言还是C#,毕竟.NET平台这么强大,写起来就是爽.缘起:之前打算一些新的产品或者新的要开发的东西,由于没有历史包袱,就想重新选型一下 ...

  10. java连接数据库加载驱动到java项目

    java连接数据库 package com.cook.zheng; import java.sql.Connection; import java.sql.DriverManager; public ...