handelc中慎用signal类型变量
来源:互联网 发布:郴州干部网络培训 编辑:程序博客网 时间:2024/06/03 22:52
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类型的。。。
- handelc中慎用signal类型变量
- handelc中的关键字signal
- servlet中一定要慎用实例变量
- 在handelc中直接调用verilog模块
- 如何用Handelc调用有inout类型的verilog模块
- 在Struts中慎用oracle char类型的字段
- 慎用javascript数组变量
- 慎用为初始化变量
- 慎用Servlet成员变量
- 慎用局部静态变量
- 慎用英文变量名
- hive Timestamp类型慎用
- 慎用局部静态成员变量
- Android--慎用static静态变量
- Android--慎用static静态变量
- 慎用 const 引用参数类型
- js中变量类型和变量计算
- servlet中慎用全局变量
- 输入子系统概念及其构架
- GC机制小结
- [Point Cloud Library] 点云数据写入PCD文件
- Eclipse快捷键 10个最有用的快捷键
- 程序员的平衡点
- handelc中慎用signal类型变量
- 调用约定
- 图片跳动显示对应图片
- 百度地图无法正常画线的问题
- java.util.concurrent.ArrayBlockingQueue
- <数据结构>线性表
- UVaOJ839---Not so Mobile
- [Point Cloud Library] 基本结构 PointCloud
- P11.Image separation