马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 feihu612 于 2015-9-7 22:31 编辑
读写命令控制模块always @(posedge clk)begin if(!rst_n)begin mcb_cmd_instr <= MCB_CMD_RD; mcb_cmd_byte_addr <= u_rd_addr[29:0]; mcb_cmd_bl <= mcb_rd_bl; mcb_cmd_wr_p <=1'b0; mcb_cmd_rd_p <=1'b0; end else begin if(u_wr_cmd_en)// write begin mcb_cmd_instr <= MCB_CMD_WP; mcb_cmd_byte_addr <= u_wr_addr[29:0]; mcb_cmd_bl <= mcb_wr_bl; mcb_cmd_wr_p <=1'b1; mcb_cmd_rd_p <=1'b0; end else if(u_rd_cmd_en)//read begin mcb_cmd_instr <= MCB_CMD_RP; mcb_cmd_byte_addr <= u_rd_addr[29:0]; mcb_cmd_bl <= mcb_rd_bl; mcb_cmd_wr_p <=1'b0; mcb_cmd_rd_p <=1'b1; end else begin mcb_cmd_wr_p <=1'b0; mcb_cmd_rd_p <=1'b0; end end end |
mcb_cmd_instr :控制命令,一般是读命令或者写命名 mcb_cmd_byte_addr :控制命令地址,一般是写地址或者读地址 mcb_cmd_bl :控制命令长度,一般是写入数据的深度、或者需要读出数据的深度 mcb_cmd_wr_p:写使能同步 mcb_cmd_rd_p:读使能同步 以上模块实现了MCB读写命令控制,可以看出来当u_wr_cmd_en信号使能后就会实现一次写控制命令发送,当u_rd_cmd_en信号使能后就会实现一次读控制命令操作。并且从程序的接口看出来,写命令的优先级要高于读命令的优先级。 此文件中还有以下代码 mcb_cmd_en信号是读写命令使能信号 u_wr_cmd_done0 写命令完成 u_rd_cmd_done0 读命令完成assign u_wr_cmd_done0 = mcb_cmd_en&(mcb_cmd_instr== MCB_CMD_WP);// user write cmd is done assign u_rd_cmd_done0 = mcb_cmd_en&(mcb_cmd_instr== MCB_CMD_RP);// user read cmd is done assign mcb_cmd_en = ((~mcb_cmd_wr_p1)&mcb_cmd_wr_p)||((~mcb_cmd_rd_p1)&mcb_cmd_rd_p);// mcb cmd enable |
以下这个模块 mcb_cmd_wr_p和mcb_cmd_rd_p,u_rd_cmd_done1 ,u_wr_cmd_done1实现信号的一个周期的延迟,u_rd_cmd_done通知用户读命令完成,u_wr_cmd_doneassign u_rd_cmd_done=u_rd_cmd_done1[1]; assign u_wr_cmd_done=u_wr_cmd_done1[1]; always@(posedge clk) begin if(!rst_n) begin mcb_cmd_wr_p1 <= 1'b0; mcb_cmd_rd_p1 <= 1'b0; u_wr_cmd_done1 <= 2'b0; u_rd_cmd_done1 <= 2'b0; end else begin mcb_cmd_wr_p1 <= mcb_cmd_wr_p; mcb_cmd_rd_p1 <= mcb_cmd_rd_p; u_rd_cmd_done1 <= {u_rd_cmd_done1[0:0],u_rd_cmd_done0}; u_wr_cmd_done1 <= {u_wr_cmd_done1[0:0],u_wr_cmd_done0}; end end |
未完待续。。。。(技术支持请联系:QQ 444363408) |