精华内容
下载资源
问答
  • 触发器的描述方法

    2020-12-07 08:01:47
     特性表实际上是一种特殊的真值表,它对触发器的描述十分具体。这种真值表的输入变量(自变量)除了数据输入外,还有触发器的初态,而输出变量(因变量)则是触发器的次态。特性方程是从特性表归纳出来的,比较简洁...
  •  特性表实际上是一种特殊的真值表,它对触发器的描述十分具体。这种真值表的输入变量(自变量)除了数据输入外,还有触发器的初态,而输出变量(因变量)则是触发器的次态。特性方程是从特性表归纳出来的,比较简洁...
  • 使用Verilog语言描述触发器和锁存器;触发器和锁存器区别。...在时序电路中要避免锁存器出现,因为锁存器出现无法过滤输入信号变化,这种变化会之后电路产生难以估计后果。 不过,如果需要锁存器

    使用Verilog语言描述触发器和锁存器;触发器和锁存器的区别。

    修正/添加:

    修改时间:2020/08/18
    添加内容:锁存器危害
    

    什么是触发器和锁存器?

    触发器:一种具有触发功能的存储单元。
    锁存器:一种由电平控制的存储单元。
    无论是触发器还是锁存器都具有存储功能,关键是在时钟的变化下和输入信号的作用下,输出信号会有什么表现?

    锁存器的Verilog描述。

    锁存器在有效电平时间内输出信号可以随着输入信号变化而变化,在其他时间内维持不变。
    在时序电路中要避免锁存器的出现,因为锁存器的出现无法过滤输入信号的变化,这种变化会对之后电路产生难以估计的后果。
    本次添加内容为 :输出信号被锁死,输入信号的变化不起作用;同时锁存器使静态时域分析非常复杂。。

    不过,如果需要锁存器,设计代码如下:

    注:latch表示锁存器

    module latch (clk,d,q);
    input	clk;
    input	d;
    output	q;
    
    assign	q=clk?d:q;
    
    endmodule
    

    测试代码如下:

    module latch_tb;
    reg	clk,d;
    wire	q;
    integer	seed;
    latch t1 (clk,d,q);
    initial
    begin
    	clk=0;d=0;seed=1;
    repeat(10)
    begin #7	d=($random(seed)/2); end
    #10	$stop;
    #10	$finish;
    end
    always #5 clk=~clk;
    endmodule
    

    测试模块随机放置10个二进制随机数模拟输入。最终的仿真波形如下:
    在这里插入图片描述
    这里对“在有效电平时间内输出信号可以随着输入信号变化而变化,在其他时间内维持不变。”做简单的解释。很明显在时钟信号处于高电平时,输出信号会随着输入信号完整的变化,但是一旦时钟信号为低电平时,输出信号会保持前一时刻的状态,一直到下一个时钟为高电平的时刻,再根据输入信号而变化。这样反复下去。

    触发器的Verilog描述。

    触发器用ff表示,D触发器就是dff。
    最常见、用途最广泛的触发器是D触发器。D触发器最简单的理解就是,在时钟满足“某种触发条件时”,输出的值就是输入的值,其他时间保持不变。
    “某种触发条件”就是电平触发和边沿触发。

    电平触发的D触发器的Verilog描述:

    module dff0 (clk,d,q);
    input	clk,d;
    output	q;
    reg	q;
    
    always @ (clk)
    	q<=d;
    
    endmodule
    

    边缘触发的D触发器的Verilog描述:

    module dff1 (clk,d,q);
    input	clk,d;
    output	q;
    reg	q;
    
    always @ (posedge clk)
    	q<=d;
    
    endmodule
    

    这两种D触发器的代码描述极其相似,区别只是以下两句:

    语句1
    always @ (clk)
    	q<=d;
    语句2
    always @ (posedge clk)
    	q<=d;
    

    语句1和语句2都是常规事件控制的一种。常规事件控制的执行条件有三种,分别是:信号的值发生变化(语句1);发生正跳变(语句2);发生负跳变。正跳变标志是posedge,负跳变标志是negedge
    事件:某一个寄存器或者线网变量的值发生变化。
    事件控制:常规事件控制、命名事件控制、或(OR)事件控制和电平敏感事件控制。(这四个的区别联系以后会说,现在只需要知道有这四种,最常用的是常规事件控制和或事件控制)

    锁存器、两种触发器的测试比较代码如下:

    reg	clk,d;
    wire	q1,q2,q3;
    integer	seed;
    latch t1 (clk,d,q1);
    dff0  t2 (clk,d,q2);
    dff1  t3 (clk,d,q3);
    
    initial
    begin
    	clk=0;d=0;seed=1;
    repeat(10)
    begin #7	d=($random(seed)/2); end
    #10	$stop;
    #10	$finish;
    end
    always #5 clk=~clk;
    endmodule
    

    仿真结果如下:

    在这里插入图片描述
    这里的仿真只是前仿真(有关前仿真和后仿真的区别联系,就不说了,重点不在这篇博客,还有自己没有接触过后仿真,没有办法提供什么意见。),前仿真没有考虑时序问题,所以建立时间和保持时间的特点就无法实现。所以当时钟和输入信号同时变化时,按照时序的逻辑是会有问题的。所以如果仅仅是前仿真(功能仿真)可以直接看最左边的值。比如:
    在这里插入图片描述
    可以看出,此时时钟是上升沿跳变且输入为1,所以q1(电时钟的值发生变化触发)的值是1。
    在这里插入图片描述
    可以看出,此时时钟是向下降沿跳变,输入信号为0,所以q1是0。

    D触发器有时需要复位信号和置位信号的Verilog描述。

    这里采用异步复位信号和异步置位信号,异步就是值得变化不需要等待时钟信号。复位信号和置位信号都是低电平有效。

    代码描述:

    module dff2 (clk,rst,load,d,q);
    input	clk,rst,load;
    input	d;
    output	q;
    reg	q;
    
    always @ (posedge clk or negedge rst or negedge load)
    	if(!rst)
    		q<=0;
    	else if (!load)
    		q<=1;
    	else
    		q<=d;
    
    endmodule
    

    测试模块:

    module dff2_tb;
    reg	clk,rst,load,d;
    wire	q;
    integer	seed;
    dff2 t1 (clk,rst,load,d,q);
    initial
    begin
    	clk=0;rst=0;load=0;d=0;seed=1;
    #3	rst=1;load=1;
    repeat(6)
    #7	d=($random(seed)/2);
    #4	rst=0;
    #2	rst=1;
    repeat(4)
    #7	d=($random(seed)/2);
    #8	load=0;
    #2	load=1;
    repeat(6)
    #7	d=($random(seed)/2);
    #10	$stop;
    #10	$finish;
    end
    always #5 clk=~clk;
    endmodule
    

    波形仿真:

    在这里插入图片描述

    总结

    这篇博客是为了介绍触发器和锁存器的区别,几种功能触发器的建模。要注意触发器的种类有许多,这里只是用Verilog语言描述不同功能要求的触发器。如果学过数电应该明白触发器由于一个又一个的门级电路组成的,最简单的触发器是基本R-S触发器,在基本R-S触发器的基础上会有钟控触发器、钟控D触发器,J-K触发器、边沿触发器等等。

    预告

    准备写一个计数器的集合,里面有最基本的计数器和指定模的计数器。计数器的作用也有很多。

    感想

    慢慢来吧,争取多写一点。

    展开全文
  • 附一个原文链接https://zhuanlan.zhihu.com/p/143450746,如果彩蛋有兴趣(雾)童鞋可以去康康(虽然这次选图没什么意思,下次写文章放露娜图) 打个广告:《一图复习数字电路》已经完工,一张图带你复习一...

    0、前言

    本人与知乎的本文作者 @间宫羽咲sama 是同一人。内容除了删去了文末的彩蛋以外大体一致。附一个原文链接https://zhuanlan.zhihu.com/p/143450746,如果对彩蛋有兴趣(雾)的童鞋可以去康康(虽然这次选的图没什么意思,下次写文章放露娜的图)

    打个广告:《一图复习数字电路》已经完工,一张图带你复习一本数字电路,你值得拥有。这个我做了一个带超链接的pdf格式,发了网盘链接了,有爱自取。

    https://editor.csdn.net/md/?articleId=106501797

    1、正文

    做数电作业时,我们经常会遇到要求使用JK触发器、T触发器用次态K图法设计驱动方程。每次做这种题我们都会吐槽——明明现在Verilog只支持D触发器,谁还无聊到用JK触发器和T触发器设计电路啊。这种题不就是单纯地折腾我们吗

    对于2变量的状态Q1Q0,假设输入为一位X,设计JK触发器就得画J1/K1/J0/K0一共4个卡诺图,设计T触发器画2个,一共就是6个。这还不得累死我啊

    当然,有没有不画图的办法呢?当然有。按照我们老师的说法,设计JK触发器的J时,可以把对应Q=0的地方保留,将Q=1的地方脑补成x。设计JK触发器的K时,可以把对应Q=1的地方取反保留,将Q=0的地方脑补成x。设计T触发器时保留Q=0,对Q=1取反。这样就不需要画新的卡诺图了,我们就能脑补出这6个卡诺图了。

    然而理想很美满,现实很骨感。对于我这种记忆力本就差还粗心的菜鸡,且不说这一串规则能不能记住了。就算是对着规则脑补,因为要算6个,经常脑补着脑补着就脑补错了,然后算错直接微笑GG,直接作业重做,一小时功夫白费。

    于是我就寻思着:能不能设计得一样就能直观地看出来,最好就是直接可以画圈圈的卡诺图的模样,不要让我再脑补了。我脑子内存本来就有限,这不是为难我吗?

    有想法就去做。经过我的观察,我总结出来了一个“伪卡诺图”,它包含所有这6个卡诺图的信息,而且是可以直观可提取的,直接可以在上面画圈的那种。可以起到1个顶6的效果

    我自己给这个“伪卡诺图”命了个名字,叫做“异或卡诺图”。我也把我自创的方法命名为“异或卡诺图法”。

    既然咱是工科,那就不整理论这些花里胡哨的,直接从一个例子上手——

    在这里插入图片描述

    这里的行指标值得是第一列对应行在的元素。

    比如第1行第2列的00、第1行第3列的01对应的行指标为第1行第1列的00
    第2行第2列的00、第2行第3列的11对应的行指标为第2行第1列的01
    以此类推

    例如对于这样一个卡诺图:
    在这里插入图片描述

    计算出来得到:

    这个操作是不是很简单?因为我们用到了异或运算,我们不妨称新的卡诺图为“异或卡诺图”。

    再来看一次上面那个图。我们会发现J1、K1的卡诺图合并起来(忽略x)就是“异或卡诺图”的高位。J0、K0的卡诺图合并起来(忽略x)就是“异或卡诺图”的低位。T1、T0的卡诺图合并起来分别是“异或卡诺图”的高位、低位。这个操作看起来很平凡,但是在“异或卡诺图”上圈卡诺圈就变得直接多了,而且基本不会犯错。

    当然,既然这个操作是如此地简单,那么证明其实也是相当简单的,使用驱动方程的定义立即可以证出。有兴趣的读者不妨将其作为习题练练手,没有兴趣的读者直接用即可,毕竟工科嘛,关键还是用。
    在这里插入图片描述

    展开全文
  • 触发器的定义:(建立在表上的触发器的逻辑表(虚表)和原表的表结构一致)  触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过...
    触发器的定义:(建立在表上的触发器的逻辑表(虚表)和原表的表结构一致)
        触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。
        触发器是当对某一个表进行操作。
    触发器的分类:
      (1)DML触发器:是指触发器在数据库中发生数据操作语言(DML)事件时将启用。DML事件即指在表或视图中修改数据的insert、update、delete语句。   (2)DDL触发器:是指当服务器或数据库中发生数据定义语言(DDL)事件时将启用。DDL事件即指在表或索引中的create、alter、drop语句。   (3)登陆触发器:是指当用户登录SQL SERVER实例建立会话时触发。
    DML触发器分为:
      (1)after触发器和for触发器一样 操作之后触发
           insert触发器 update触发器 delete触发器(after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上)

      (2)instead of 触发器
    操作之前触发
           instead of 触发器表示并不执行其定义的操作(insert、update、delete)而仅执行触发器本身。既可以在表上定义instead of 触发器,也可以在视图上定义。
    
    

     

     具体操作:

     

    触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。
    这两张是逻辑表也是虚表。
    有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。
    当触发器完成工作后,这两张表就会被删除。 Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。


    Update数据的时候就是先删除表记录,然后增加一条记录。这样在inserted和deleted表就都有update后的数据记录了。
    注意的是:触发器本身就是一个事务,所以在触发器里面可以对修改数据进行一些特殊的检查。如果不满足可以利用事务回滚,撤销操作。

     

    转载于:https://www.cnblogs.com/1184212881-Ark/p/7047438.html

    展开全文
  • 下面的文章主要描述的是MySQL触发器的正确创建步骤,MySQL触发器的删除,你如果MySQL触发器的正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。1、创建MySQL触发器:语法:...

    下面的文章主要描述的是MySQL触发器的正确创建步骤,MySQL触发器的删除,你如果对MySQL触发器的正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。

    1、创建MySQL触发器:

    语法:

    CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name

    FOR EACH ROW

    BEGIN

    trigger_stmt

    END;

    CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name

    FOR EACH ROW

    BEGIN

    trigger_stmt

    END;

    例子

    CREATE TRIGGER SetUserHome after insert ON users

    FOR EACH ROW

    BEGIN

    update `users` set homeLocationX = 128,

    homeLocationY=128, homeLocationZ=30

    where uuid = NEW.uuid

    END

    以上的例子是错误的, 让本表进行触发时进行更新会让程序进入死循环。

    系统会报这样的错误:it is already used by statement which invoked this stored function/trigger.

    应该改成以下语句:

    CREATE TRIGGER SetUserHome before insert ON users

    FOR EACH ROW

    BEGIN

    set New.homeLocationX = 128;

    set New.homeLocationY = 128;

    set New.homeLocationZ=30;

    END

    大写的为关键字

    trigger_name:触发器的名字,我常用的命名规则t_name_tableName_(b|a)(i|u|d),t:MySQL触发器标识,name:英文名,tableName:表名,b(BEFORE):标识是触发事件之前,a(AFTER):标识触发事件之后,i(insert):标识insert事件,u(update):标识update事件,d(delete):标识delete事件;

    trigger_time:触发时间(BEFORE或AFTER)

    trigger_event:事件名(insert或update或delete)

    tbl_name:表名(必须是永久性表)

    trigger_stmt:执行语句(可以是复合语名),使用别名OLD和NEW,能够引用与触发程序相关的表中的列。

    2、删除解发器

    语法:

    DROP TRIGGER [schema_name.]trigger_name;

    注意:以上操作均需SUPER权限

    示例:

    DROP TRIGGER t_wiley_hotelComment_bu;

    delimiter //

    CREATE TRIGGER t_wiley_hotelComment_bu BEFORE UPDATE ON hotel_comment

    FOR EACH ROW

    BEGIN

    IF OLD.ispass=0 && NEW.ispass=1 THEN

    UPDATE hotel_info SET sumcommentsumcomment=sumcomment+1,

    sumconsumesumconsume=sumconsume+NEW.consume,sumservicesumservice=sumservice+NEW.service,

    sumroomsumroom=sumroom+NEW.room,sumentironsumentiron=sumentiron+NEW.entironment,

    totaltotal=total+(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;

    ELSEIF OLD.ispass=1 && NEW.ispass=0 THEN

    UPDATE hotel_info SET sumcommentsumcomment=sumcomment-1,

    sumconsumesumconsume=sumconsume-NEW.consume,sumservicesumservice=sumservice-NEW.service,

    sumroomsumroom=sumroom-NEW.room,sumentironsumentiron=sumentiron-NEW.entironment,

    totaltotal=total-(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;

    END IF;

    END;//

    delimiter ;

    以上的相关内容就是对MySQL触发器的使用的介绍,望你能有所收获。

    展开全文
  • 触发器的小应用

    2017-11-19 23:01:03
    触发器的小应用需求描述最近有一个需求,主要是将另外一个系统的数据导入我所负责的系统中,然后在该数据的基础上,做一些应用。不要问我,为什么不用rest full 接口来做。一则,另外一个系统所用的技术不同,重新...
  • 本文纯属个人见解,是前面学习总结,如有描述不正确地方还请高手指正~ 一、触发器概述 1、SQL Server供提两种类型的触发器:AFTER触发器和INSTEADOF触发器。 l AFTER触发器作用在表上,晚于约束处置。...
  • 基于探索微分型单稳态触发器仿真实验技术的目的,采用Multisim10仿真软件微分型单稳态触发器的工作波形进行了仿真实验测试,给出了Multisim仿真实验方案,分析了电路由稳态进入暂态、暂态期间电容C充电、暂态结束...
  • MySQL触发器

    2018-12-28 00:48:00
    似乎在《高性能MySQL》中,对触发器作了一定的描述,也提到使用中的一些优势和局限性,但感觉还是不能完全理解触发器的全部功能和实现。于是自己在网上看了一些文章,结合官网...
  • 下面的文章主要描述的是mysql触发器的正确创建步骤,MySQL触发器的删除,你如果MySQL触发器的正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。 1、创建MySQL触发器: 语法: ...
  • 下面的文章主要描述的是MySQL触发器的正确创建步骤,MySQL触发器的删除,你如果MySQL触发器的正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。 1、创建MySQL触发器: 语法: ...
  • MYSQL使用触发器完成类似断言操作问题描述创建相对应表使用触发器解决题目要求总结 ...因为对触发器也不是很熟悉,这里分别对两个表创建相对应触发器,本来想创建一个触发器ON两个表,但会报错,不能实...
  • Trigger双击:Create Trigger(位置在右上角)后图下图所示NameTrigger的名字Expression添加Trigger表达式,双击add后添加Multiple PROBLEM events generationDescriptiontrigger的描述URLServerity...
  • 1)锁存器是什么? 从概念上来讲,锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使...从上面的描述可以看出,锁存器是电平触发的,触发器是边沿触发的。如果是电平触发的,当使能的时候,如果输入
  • 事件描述: 一大型煤炭企业,下属十多个矿,有一瓦斯数据上传系统和一个短信平台系统,两个系统用都是SQL SERVER数据库,但是布署在不同服务器上。现在想要实现如果瓦斯数据上传中断则自动给指定手机发送短信...
  • 业务描述:网上选课系统,当用户报名以后,管理员该报名审核,如果审核通过(订单状态改为 1 ),并且课程表 名额剩余数量(cCount -1)。必须是通过才 减 一 刚开始接触触发器,被怎么会,后来插了下百度,暂时...
  • 在上一篇文章中,我们已经大概描述了触发器、事件、动作的概念,并且通过"养鸡场"的场景比喻了它们,这次我们来看看怎样创建一个触发器,并且细细品味一番。 我们继续使用之前的测试环境,...可以看到触发器的创建配..
  • 【判断题】触发器按动作特点可分为基本型、异步型 、主从型和边沿型。 ( )【判断题】【论述题】有一对夫妇,收入并不高,却非常追求生活格调。有一天,在翻阅杂志时候,看到了一只作为广告背景古玩钟,他们立刻被它...
  • 场景描述 有一个业务系统,做了OGG备库用于统计查询。 生产库维护由系统管理员负责,而备库日常维护由专职DBA负责。 系统厂商在生产环境进行升级时,经常会修改数据结构。 DBA很快发现了OGG报错,查看日志...
  • 本文通过示例描述Oracle中的触发器的写法,旨在描述一个简单记录监控日志的的触发器的写法。希望初学者能有帮助. 1. 准备工作:1) 创建一张表,在SQLplus控制台执行如下脚本: CREATE TABLE PRODUCT ( "ID" ...
  • 本文通过示例描述Oracle中的触发器的写法,旨在描述一个简单记录监控日志的的触发器的写法。希望初学者能有帮助.1. 准备工作: 1) 创建一张表,在SQLplus控制台执行如下脚本: CREATE TABLE PRODUCT ( "ID" ...
  • SQL之触发器和视图

    千次阅读 2014-11-15 16:01:19
    一个触发器的描述包括三个部分:事件、条件和动作。 MySQL中触发器创建的语法: The DEFINER clause determines the security context to be used when checking access privileges at trigger a
  • 创建新触发任务 Windows Server 2008...仔细分析这些事件内容,网络管理员既能了解服务器系统运行状态,又能暗藏在系统中威胁进行及时处理,保证服务器系统运行安全性。不过,网络管理员必须每次主动...
  • 但是,那些一眼看上去不是很明显东西却会他们性能造成显著影响。这里我将描述一个命令,他可用来减少一些不可预料问题产生影响 。  以反复被触发Insert触发器为例,尤其是当使用Insert INTO语句...
  • MySQL触发器(转载)

    2018-12-28 09:43:00
    似乎在《高性能MySQL》中,对触发器作了一定的描述,也提到使用中的一些优势和局限性,但感觉还是不能完全理解触发器的全部功能和实现。于是自己在网上看了一些文章,结合官网...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 376
精华内容 150
关键字:

对触发器的描述