至芯兴洪 发表于 2011-5-29 13:59:49

SDRAM 接口控制程序

在部分SDRAM接口控制程序中我发现IF条件语句中包含了与运算和或运算
部分源程序如下:
if ((CMD == 3'b110)&(LOAD_REG1 == 0)&(CMD_ACK == 0))      //LOAD_REG1 command
                        LOAD_REG1 <= 1;
                else   
                        LOAD_REG1 <= 0;
               
                if ((CMD == 3'b111)&(LOAD_REG2 == 0)&(CMD_ACK == 0))      //LOAD_REG2 command
                        LOAD_REG2 <= 1;
                else
                        LOAD_REG2 <= 0;

if (((CM_ACK == 1)| (LOAD_REG1 == 1) |(LOAD_REG2 == 1))&(CMD_ACK == 0))
                        CMD_ACK <= 1;
在某些大型设计要求IF语句条件中不能包含有运算,虽然仿真结果一样,但把IF条件中的运算符号 "&","|"改为逻辑符号 "&&","||"好些

修改后如下:
if ((CMD == 3'b110) && (LOAD_REG1 == 0) & &(CMD_ACK == 0))      //LOAD_REG1 command
                        LOAD_REG1 <= 1;
                else   
                        LOAD_REG1 <= 0;
               
                if ((CMD == 3'b111) && (LOAD_REG2 == 0) && (CMD_ACK == 0))      //LOAD_REG2 command
                        LOAD_REG2 <= 1;
                else
                        LOAD_REG2 <= 0;
if (((CM_ACK == 1) || (LOAD_REG1 == 1) || (LOAD_REG2 == 1)) && (CMD_ACK == 0))
                        CMD_ACK <= 1;

请大家指正:谢谢!

cgh996 发表于 2011-7-31 13:52:06

很有道理!@
修改后语法严谨些
   不过两者的结果是一样的

cgh996 发表于 2011-7-31 13:53:33

在vhdl 中则不会出现这样模棱两可的啦其逻辑与为 and
   而且只有布尔类型的才可以进行与运算
页: [1]
查看完整版本: SDRAM 接口控制程序