在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2521|回复: 3

[原创] 做了个经典FPGA高级验证板,源码分享,讨论开发经验

[复制链接]
发表于 2015-9-7 22:24:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 feihu612 于 2015-9-7 22:31 编辑

1.gif


2.jpg



读写命令控制模块

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_done

assign 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)
 楼主| 发表于 2017-5-27 09:15:52 | 显示全部楼层
如果附加EETOP的网站链接,可否帮忙推广我的微信公众号:嵌入式人生之FPGA
我准备公开工作近10年来的FPGA设计相关笔记,包括文档,源码,硬件原理图或PCB,算法等等。行业包括光网络通信、图像视频处理、数控系统。还有网友问题解答!
如果谁有疑问,可以在文章下留言,我回复!
欢迎订阅
发表于 2017-6-1 23:04:02 | 显示全部楼层
回复 2# feihu612


   的确不错,这个做逻辑的思维很好。很佩服LZ的思维。
发表于 2017-7-10 10:51:43 | 显示全部楼层
谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 06:53 , Processed in 0.024905 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表