完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
回复本帖可获得 1 分积分奖励! 每人限 1 次 |
以下程序是关于有效数据之后插入冗余数据,输入输出均遵循AXI-strem协议,我一共插入了7个数据,为啥仿真的时候,插入的冗余数据就显示一个,不该是显示7个相同的数据吗?求各位大侠指点下,谢啦
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2017/04/26 16:33:58 // Design Name: // Module Name: dummy_insert // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// //端口声明 module dummy_insert( clk, rstn, s_data_tvalid, s_data_tdata, s_data_tready, s_data_tlast, m_data_tvalid, m_data_tdata, m_data_tready, m_data_tlast ); parameter INSERT_NUM = 7; parameter DUMMY_DATA = 4'b1001; //input and output input clk; input rstn; input s_data_tvalid; input[3:0] s_data_tdata; output s_data_tready; input s_data_tlast; output m_data_tvalid; output[3:0] m_data_tdata; input m_data_tready; output m_data_tlast; //插入冗余数据选择标志信号 reg dummy_sel; always @(posedge clk) begin if(rstn == 1'b0) begin dummy_sel <= 1'b0; end else if(s_data_tlast) begin dummy_sel <= 1'b1; end else if(m_data_tlast) begin dummy_sel <= 1'b0; end end //m_data_tvalid(整个传输时间) reg m_data_tvalid_t; reg m_data_tvalid_insert; wire m_data_tvalid; //有效数据传输 always @(posedge clk) begin if(rstn == 1'b0) begin m_data_tvalid_t <= 1'b0; end else begin m_data_tvalid_t <= s_data_tvalid; end end //冗余数据传输 always @(posedge clk) begin if(rstn == 1'b0) begin m_data_tvalid_insert <= 1'b0; end else begin m_data_tvalid_insert <= dummy_sel & m_data_tready & s_data_tvalid; end end assign m_data_tvalid = m_data_tvalid_t | m_data_tvalid_insert; //m_data_tlast reg [2:0] cnt_dummy; always @(posedge clk) begin if(rstn==1'b0 || s_data_tlast == 1'b1) begin cnt_dummy <= 2'd0; end else if(cnt_dummy < INSERT_NUM && dummy_sel && m_data_tready ) begin cnt_dummy <= cnt_dummy + 1'b1; end end assign m_data_tlast = (cnt_dummy == INSERT_NUM-1) & m_data_tready; //m_data_tdata reg [3:0] m_data_tdata_t; always @(posedge clk) begin if(s_data_tvalid & s_data_tready) begin//有效数据传输 m_data_tdata_t <= s_data_tdata; end else if(m_data_tvalid_insert) begin m_data_tdata_t <= DUMMY_DATA;//冗余数据传输 end end assign m_data_tdata = m_data_tdata_t; //s_data_tready assign s_data_tready = (~dummy_sel) & m_data_tready;//传有效数据时 为高电平 endmodule
|
|
相关推荐
9个回答
|
|
回帖奖励 +1 分积分
插入的数据是9吗?你这里有6个啊,你要看这个数据占了几个时钟,相同的数据当然就只显示一次了,但是显示一次不代表我只有一个数据,要看时钟个数!
最佳答案
|
|
|
|
上面截图不全 这是全图
|
|
|
|
回帖奖励 +1 分积分
这是Verlog HDL吗?
|
|
|
|
对呀 ,程序我看着没问题呀 ,但是仿真结果跟我预想的有区别呀,虽然插入了冗余数据,但是我想插7个,它只显示了一个,求大侠解答 |
|
|
|
之前的我搞清楚了,谢谢你。我想请教一下,就是我想插入10个数据,为什么每次插入都是少一个呢,是不是跟时延有关系 |
|
|
|
你要插入几个这是通过计数器来走的啊,你要有个专门的计数器,那不就是想要几个就有几个吗
|
|
|
|
刚开始看了下Verlog HDL,准备面试~ |
|
|
|
刚看了 就准备面试。。。。。。大神呀 但是感觉这个方向待遇没有互联网好啊 |
|
|
|
![]() |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
236 浏览 0 评论
666 浏览 0 评论
基于matlab FPGA verilog的FIR滤波器设计
622 浏览 0 评论
1273 浏览 0 评论
930 浏览 2 评论
3405 浏览 75 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-7-11 01:02 , Processed in 0.740726 second(s), Total 90, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191