EDA语句解释(交通灯控制模块,求全注释,谢谢)

发布网友 发布时间:2022-04-24 08:55

我来回答

1个回答

热心网友 时间:2022-06-18 06:11

mole contr(tiaoshi,en,clk,yzflag,t1,t2,q1,q2);

input clk,yzflag,en,tiaoshi; //输入信号,控制位

input[7:0] t1,t2; //输入信号,用于置数

output reg[7:0] q1,q2; //输出信号

always @(posedge clk^tiaoshi or posedge yzflag or
posedge en) //此进程在这些信号的上升沿被触发

begin

if(en) begin
q1=q1;q2=q2; end //若en=‘1’,则q1、q2保持原来的状态

else //以下为en=‘0’的情况

begin

if(yzflag) //若yzflag=‘1’,则q1=t1,q2=t2。t1,t2为输入,q1,q2为输出,
//相当于将输入的数直接输出
begin q1=t1;q2=t2; end

else //以下为yzflag=‘0’的情况

begin

if(q1==0) //若q1等于0,则将99赋给q1。相当于一个99~0循环的减法器。
q1='h99; //若减法器减到0了,则跳到99

else begin q1=q1-1;end //减法器,q1没减到0的时候每次减一

if(q1[3:0]>='ha) //将十六进制转换为十进制,文末“说明1”详细讲解
q1[3:0]=9;

if(q2==0) //若q2等于0,则将99赋给q2。相当于一个99~0循环的减法器。
q2='h99; //若减法器减到0了,则跳到99

else begin q2=q2-1;end //减法器,q2没减到0的时候每次减一
if(q2[3:0]>='ha) //将十六进制转换为十进制
q2[3:0]=9;

end

end

end

endmole

说明1:
if(q1[3:0]>='ha)
q1[3:0]=9;
q1为十六进制数,从99开始依次减一,一直到90时都正常。再减一次时,应该变为0x8f(十六进制),但我们想要的确却是,所以判断 if(q1[3:0]>='ha),则q1[3:0]=9,则q1=了。
那为何q1[7:4]未判断?我们往上看可知道:
if(q1==0) q1='h99;
此语句出现在判断的最开始,若q1减到0了,则将99赋给q1,也就是说q[7:4]只能在9~0之间切换。

字字手打,望楼主采纳!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com