cpld -verilog模拟读写寄存器 异常

2019-07-20 23:50发布

/*
任务:根据上一级接收的命令和数据,若接收到的命令
      是0x10、0x11、0x12,分别‘写’电源、控制、
      使能字,若接收到的命令是0x20、0x21、0x22、
      0x23、0x2F,分别‘读’电源、控制、使能字、
      外部状态,版本号
问题:单独‘写’电源、控制、使能字时,输出正常,
      但是‘读’电源、控制、使能字时,电源、控
      制、使能字就发生了改变,并且读取到的字也
      随之改变。

      例如,发送 rxcmd_reg=0x10,rxdata_reg=0x55 时,
      power的输出确实是0x55,但是发送rxcmd_reg=0x20,
      rxdata_reg=0x00 时,power变成0,txdata_reg输出
      也变成0。

      源码的部分如下,请求大神帮助!!!
      跪谢!!!!!
**/

module usart_test(rxcmd_reg,rxdata_reg,status,power,control,enable,txcmd_reg,txdata_reg);

        input[7:0] rxcmd_reg;//串口接收到的命令
        input[7:0] rxdata_reg;//串口接收到的命数据
       
        input[7:0] status;//连接外部状态

        output[7:0] power;//电源字
        output[7:0] control;//控制字
        output[7:0] enable;//使能字
        output[7:0] txcmd_reg;//发送命令
        output[7:0] txdata_reg;//发送数据
       
        reg[7:0] power;//电源字
        reg[7:0] control;//控制字
        reg[7:0] enable;//使能字

        reg[7:0] txdata_reg;//发送数据
       
        assigne txcmd_reg=rxcmd_reg;//发送命令 = 接收命令
       
        always@(rxcmd_reg)begin
            case(rxcmd_reg)
                8'h10:power<=rxdata_reg;//写电源字
                8'h11:control<=rxdata_reg;//写控制字
                8'h12:enable<=rxdata_reg;//写使能字
                                       
                8'h20:txdata_reg<=power;//读电源字
                8'h21:txdata_reg<=control;//读控制字
                8'h22:txdata_reg<=enable;//读使能字
                8'h23:txdata_reg<=status;//读外部状态
                8'h2F:txdata_reg<=8'h20;//读版本号
                default:txdata_reg<=8'hE0;//错误命令               
            endcase
        end

endmodule

0条回答

一周热门 更多>