请教:
问题是这样的,我使CPLD定义了一组16位的双向IO,与MCU进行数据传递。
初始化默认是设置成高阻态(Z),接收来自MCU的数据,之后调整成输出端口
将通讯校验的结果传回给MCU,如下:
连续赋值语句
assign data_io[0] = data_io_dir_reg ? data_out[0]:1'bz;
assign data_io[1] = data_io_dir_reg ? data_out[1]:1'bz;
.
.
.
assign data_io[15] = data_io_dir_reg ? data_out[15]:1'bz;
此时data_io_dir_reg=1,io作为输出端口使用。
如果我初始化时(initial)data_out[15:0] = 16'hffff,
此时只有相应的位为0时,才会执行此语句。如果继续保持1的话,不会执行连续赋值语句,
相应的IO处于不定态,使用modelsim仿真显示z,下载实验的结果也不稳定。
我尝试了两种方法解决此问题:
1、在给data_out赋正式值之前,先全部翻转一下,但编译器优化处理了。
2、把data_io[15:0]移入always块中,因为定义的是inout,编译报错。
以上是我遇到的问题,寻求帮助,谢谢! |