草庐IT

FPGA:逻辑运算及逻辑门

timerring 2023-04-09 原文

文章目录

逻辑变量与逻辑函数

逻辑是指事物因果之间所遵循的规律。为了避免用冗繁的文字来描述逻辑问题,逻辑代数采用逻辑变量和一套运算符组成逻辑函数表达式来描述事物的因果关系。

逻辑代数中的变量称为逻辑变量,一般用大写字母A、B、C…表示。逻辑变量的取值只有两种,即逻辑0和逻辑1。 0和1称为逻辑常量。这里0和1本身并没有数值意义,它仅仅是一种符号,代表事物矛盾双方的两种状态。
数字电路的输出与输入之间的关系是一种因果关系, 因此它可以用逻辑函数来描述,并称为逻辑电路。

对于任何一个电路,若输入逻辑变量A、 B、 C … 的取值确定后,其输出逻辑变量L的值也被唯一地确定了,则可以称L是A、 B、 C … 的逻辑函数, 并记为
L = f ( A , B , C , ⋯   ) \begin{array}{c} L = f(A, B, C, \cdots) \end{array} L=f(A,B,C,)

逻辑运算

当0和1表示逻辑状态时,两个二进制数码按照某种特定的因果关系进行的运算。

基本逻辑运算及对应的逻辑门

在逻辑代数中,有与、或、非三种基本的逻辑运算。还有 与非、或非、同或、异或等常用的复合逻辑运算。

逻辑运算的描述方式:逻辑代数表达式、真值表、逻辑图、卡诺图、波形图和硬件描述语言(HDL) 等。

1.与运算

(1) 与逻辑:只有当决定某一事件的条件全部具备时,这一事件才会发生。这种因果关系称为与逻辑关系。

与逻辑举例

状态表与真值表

与逻辑符号

与逻辑表达式

与逻辑: 
L = A ⋅ B = A B L = A ·B= AB L=AB=AB

与门电路

实现与逻辑运算(即满足与逻辑真值表)的电子电路称为与门电路(简称与门)

2. 或运算

只要在决定某一事件的各种条件中,有一个或几个条件具备时,这一事件就会发生。这种因果关系称为或逻辑关系。

或逻辑举例

电路状态表

状态表与真值表

或逻辑符号

或逻辑表达式

或逻辑: 
L = A + B L = A +B L=A+B

或门电路

实现或逻辑运算(即满足或逻辑真值表)的电子电路称为或门电路(简称或门)。

3. 非运算

事件发生的条件具备时,事件不会发生;事件发生的条件不具备时,事件发生。这种因果关系称为非逻辑关系。

非逻辑举例

电路状态表

状态表与真值表

非逻辑符号

非逻辑表达式

L = A ˉ L=\bar{A} L=Aˉ

三极管实现的非门电路

常用复合逻辑运算及对应的逻辑门

在逻辑代数中,有与、或、非三种基本的逻辑运算。还有 与非、或非、同或、异或等常用的复合逻辑运算。

逻辑运算的描述方式:逻辑代数表达式、真值表、逻辑图、卡诺图、波形图和硬件描述语言(HDL) 等。

1. 与非运算

两输入变量与非

逻辑真值表

与非逻辑符号

与非逻辑表达式

L = A ⋅ B ‾ L=\overline{A \cdot B} L=AB

2. 或非运算

两输入变量或非

逻辑真值表

或非逻辑符号

或非逻辑表达式

L = A + B ‾ L=\overline{A+B} L=A+B

3. 异或逻辑

若两个输入变量的值相异,输出为1,否则为0。

异或逻辑真值表

异或逻辑符号

异或逻辑表达式

L = A ˉ B + A B ˉ = A ⊕ B L=\bar{A} B+A \bar{B}=A \oplus B L=AˉB+ABˉ=AB

4.同或运算

若两个输入变量的值相同,输出为1,否则为0。

同或逻辑真值表

同或逻辑逻辑符号

同或逻辑表达式

L = A ˉ B ˉ + A B = A ⊙ B L=\bar{A} \bar{B}+A B=A \odot B L=AˉBˉ+AB=AB

集成逻辑门电路简介

逻辑运算都可以用SSI集成电路实现 。

三态门

三态输出门电路逻辑符号

高电平有效的同相三态门

低电平使能的三态输出非门电路

三态输出门的真值表

高电平使能的三态输出门的真值表

低电平使能的三态输出门的真值表

应用举例

(1) 构成总线传输结构

为了减少复杂的系统中各个单元电路之间的连线,数字系统中信号的传输常常采取一种称为“总线”(Bus)的结构形式,以达到在同一导线上分时传递若干路信号的目的。

工作时只要控制各个 E N n EN_n ENn端的逻辑电平,保证在任何时刻仅有一个三态输出门电路被使能,就可以把各个输出信号按要求顺序送到总线上,而互不干扰。

(2) 实现信号的双向传输

DIR (EN) 为传送控制信号。

当DIR=1时, G1工作,G2为高阻态,数据线DO/I上的数据经G1送到总线上;

当DIR=0时, G2工作, 而G1为高阻态,来自总线的数据经G2送到的DO/I线上。

参考文献:

  1. Verilog HDL与FPGA数字系统设计,罗杰,机械工业出版社,2015年04月
  2. Verilog HDL与CPLD/FPGA项目开发教程(第2版), 聂章龙, 机械工业出版社, 2015年12月
  3. Verilog HDL数字设计与综合(第2版), Samir Palnitkar著,夏宇闻等译, 电子工业出版社, 2015年08月
  4. Verilog HDL入门(第3版), J. BHASKER 著 夏宇闻甘伟 译, 北京航空航天大学出版社, 2019年03月

有关FPGA:逻辑运算及逻辑门的更多相关文章

  1. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  2. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  3. ruby - 带括号和 splat 运算符的并行赋值 - 2

    我明白了:x,(y,z)=1,*[2,3]x#=>1y#=>2z#=>nil我想知道为什么z的值为nil。 最佳答案 x,(y,z)=1,*[2,3]右侧的splat*是内联扩展的,所以它等同于:x,(y,z)=1,2,3左边带括号的列表被视为嵌套赋值,所以它等价于:x=1y,z=23被丢弃,而z被分配给nil。 关于ruby-带括号和splat运算符的并行赋值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow

  4. ruby - 定义自定义 Ruby 运算符 - 2

    问题是:除了在“OperatorExpressions”?例如:1%!2 最佳答案 是的,可以创建自定义运算符,但有一些注意事项。Ruby本身并不直接支持它,但是superatorsgem做了一个巧妙的把戏,将运算符链接在一起。这允许您创建自己的运算符,但有一些限制:$geminstallsuperators19然后:require'superators19'classArraysuperator"%~"do|operand|"#{self}percent-tilde#{operand}"endendputs[1]%~[2]#Out

  5. ruby - Ruby 中 <=> 运算符的名称是什么?他们怎么调用它? - 2

    在Ruby中有运算符(operator)。在API中,他们没有命名它的名字,只是:Theclassmustdefinetheoperator...Comparableusestoimplementtheconventionalcomparison......theobjectsinthecollectionmustalsoimplementameaningfuloperator...它叫什么名字? 最佳答案 参见上面的@Tony。然而,它也被称为(俚语)“宇宙飞船运算符(operator)”。

  6. ruby - 将运算符传递给函数? - 2

    也许这听起来很荒谬,但我想知道这对Ruby是否可行?基本上我有一个功能...defadda,bc=a+breturncend我希望能够将“+”或其他运算符(例如“-”)传递给函数,这样它就类似于...defsuma,b,operatorc=aoperatorbreturncend这可能吗? 最佳答案 两种可能性:以方法/算子名作为符号:defsuma,b,operatora.send(operator,b)endsum42,23,:+或者更通用的解决方案:采取一个block:defsuma,byielda,bendsum42,23,

  7. ruby - OR 运算符和 Ruby where 子句 - 2

    可能真的很简单,但我很难在网上找到关于这个的文档我在Ruby中有两个activerecord查询,我想通过OR运算符连接在一起@pro=Project.where(:manager_user_id=>current_user.id)@proa=Project.where(:account_manager=>current_user.id)我是ruby​​的新手,但我自己尝试使用||@pro=Project.where(:manager_user_id=>current_user.id||:account_manager=>current_user.id)这没有用,所以1.我想知道如何在

  8. ruby - Ruby 中字符串运算符 + 和 << 的区别 - 2

    我是Ruby和这个网站的新手。下面两个函数是不同的,一个在函数外修改变量,一个不修改。defm1(x)x我想确保我理解正确-当调用m1时,对str的引用被复制并传递给将其视为x的函数。运算符当调用m2时,对str的引用被复制并传递给将其视为x的函数。运算符+创建一个新字符串,赋值x=x+"4"只是将x重定向到新字符串,而原始str变量保持不变。对吧?谢谢 最佳答案 String#+::str+other_str→new_strConcatenation—ReturnsanewStringcontainingother_strconc

  9. ruby - 我可以在 Ruby 中动态调用数学运算符吗? - 2

    ruby中有这样的东西吗?send(+,1,2)我想让这段代码看起来不那么冗余ifop=="+"returnarg1+arg2elsifop=="-"returnarg1-arg2elsifop=="*"returnarg1*arg2elsifop=="/"returnarg1/arg2 最佳答案 是的,只需像这样使用send(或者更好的是public_send):arg1.public_send(op,arg2)这是可行的,因为Ruby中的大多数运算符(包括+、-、*、/、andmore)只需调用方法。所以1+2与1.+(2)相同

  10. Linux磁盘分区中物理卷(PV)、卷组(VG)、逻辑卷(LV)创建和(LVM)管理 - 2

    文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分

随机推荐