handelc中慎用signal类型变量

        signal声明的变量很特殊,只在被赋值的那个时钟保持被赋的值,在其他时钟会变回他的初始值。所以一般对于一些一直随着时钟CLK变化的变量,将之声明为signal类型的。

        但是对于一些并不随着时钟CLK变化的变量,比如是一些外部输入的变量(比如模仿外部按键或开关输入持续的0或1),类似的这些变量是不能声明为signal变量的,否则当你想让该变量持续为0或持续为1时,往往达不到要求的效果。

 下面举个例子:

  比如用Handelc写了一个读写RAM的程序:

  读ram:

unsigned int 1  we;

 readram(address,rdata)

{

   we=1;   //读写允许信号

   *rdata=ramdata_out;

}

  写ram:

 writeram(address,wdata)

{

  we=0;

  ramdata_in=wdata;

}

void main(void)

{

     signal unsigned  rdata1,rdata2;   

     writeram(0,1);    //向地址0写入1

     writeram(1,2);

     readram(0,&rdata1); //读地址0的数据

     readram(0,&rdata2)

}

注:  程序中的we只能声明为 unsigned int类型的,而不能声明为signal类型,因为该变量是一个外部输入变量,它的值不是一直变化的。如果声明为signal类型,当进行读操作时,当we被赋值为1后的下一个时钟会恢复为初始值0,而不能持续为1,这样就不能正常产生读申请信号,读操作因此无法完成。同理,writeram(address,wdata)中的wdata也应是unsigned  int类型的。

         而程序中的rdata1和rdata2在有些情况下必须被声明为signal类型。比如操作的ram是sdram(即动态ram),动态ram的数据输出可以一次读取多个字节,当读申请产生时,sdram会每隔一个clk输出总线上就会输出一个数据,而接收此数据的变量rdata如果声明为int类型读出的数据就会出错。这时必须声明为signal类型的。。。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值