触 发 器

触 发 器

由正跳变沿触发的D触发器的最简单的SystemVerilog模型如下所示:

module dff loutput logic q, input logic d,clk);
	always_ff @(posedge clk)
		q<=d;
endmodule

因为这是时序逻辑,所以必须用非阻塞赋值。同样,负跳变沿触发的触发器可以通过检测逻辑电平从1跳变到0来建立模型。

异步置位和复位

在这里插入图片描述
这两个输入应该只用于触发器的初始化。在系统正常运行期间,用R和S信号来设置触发器的状态是一个坏习惯,必须改正。这样做是因为在同步系统中,触发器的状态改变只允许由时钟的跳变沿触发。由于置位或复位输人信号是异步的,因此不能确保触发器输出的改变发生在特定时刻。这会引起各种时序问题。总而言之,在设计中必须保持严格的同步,或者遵循结构化的异步设计方法,才能设计出稳定可靠的时序电路。

下面是一个带异步复位的D触发器的SystemVerilog模型,该触发器的输出变化必须发生在时钟的正跳变沿和复位信号的负跳变沿时刻:

module dffr (output logic q,
			input logicd,clk,n_reset);

	always ff @(posedge clk,negedge n_reset)
		if(~n_reset)
			q <= '0; 
		else
			q <= d;
endmodule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,根据您的要求,我将为您提供 SQL 语句来完成这个任务。请注意,下面的代码中,假设表 Course 已经存在,并且它有四个字段:课程编号、课程名称、学分、教师编号;同时,表 SC 也已经存在,并且它有三个字段:学号、课程编号、成绩。在这个基础上,我们需要增加一门课程,编号为 '005',名称为 '职业规划',学分为 4,教师编号为 '0014'。 ```sql INSERT INTO Course VALUES ('005', '职业规划', 4, '0014'); ``` 接下来,我们需要在 SC 表中建立一个触发器,用来限制出生年份为 2003 和 2004 的学生才能选修职业规划这门课程。触发器的代码如下: ```sql CREATE TRIGGER tr_SelectCourse ON SC FOR INSERT AS BEGIN IF EXISTS(SELECT * FROM inserted WHERE Cno = '005' AND YEAR(GETDATE()) - YEAR(Birth) NOT IN (19, 20)) BEGIN RAISERROR('不能选修该门课程', 16, 1); ROLLBACK TRANSACTION; END END ``` 这个触发器会在 SC 表中插入新数据时被。如果插入的课程编号为 '005',并且学生的出生年份不是 2003 或 2004,那么就会输出错误信息,并且撤销插入操作。接下来,我们可以分别插入两条数据,看看触发器的效果: ```sql INSERT INTO SC VALUES ('00002', '005', NULL); -- 输出:不能选修该门课程,插入失败。 INSERT INTO SC VALUES ('00003', '005', NULL); -- 插入成功。 ``` 第一个插入操作会因为触发器的限制而失败,第二个插入操作符合要求,因此会成功插入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻童:CPU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值