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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3012|回复: 2

[原创] 请问这种延时该如何处理掉呢?

[复制链接]
发表于 2011-10-4 09:16:20 | 显示全部楼层 |阅读模式

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

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

x

这里编写了一个求平均数的程序,每输入两个数求一次平均数。但这样写的话平均数输出是在每第三个输入周期,
这样当第三个周期来的时候,新的数据就浪费掉了。怎样改才能保证每两个周期就正好输出一个平均值呢?

Untitled.jpg




module MEAN (
                           clk,
                           rst_n,
                           idin,
                           mean_dout,
                          mean_done
                         );

input clk;
input rst_n;
input  [7:0] idin;


output [63:0] mean_dout;
output mean_done;


wire clk, rst_n;
wire [7:0] idin;
wire [63:0] mean_dout;

wire [63:0] buf_mean;
wire mean_done;


reg [9:0] size;
reg [7:0] buf_idin;
reg [63:0] buf_sum;


assign mean_dout = buf_mean;
assign mean_done = (size == 2'b10)? 1 : 0;
assign buf_mean = (mean_done == 1) ? buf_sum >>1 : 'hz;


always @ (posedge clk or negedge rst_n)
if (!rst_n)
      begin
         buf_idin = 'b0;
         buf_sum = 'b0;
         size = 'b0;
     end
   else if (!mean_done)
     begin
         size = size + 1'b1;
         buf_idin = idin;
         buf_sum = buf_sum + buf_idin;  
    end
else if (mean_done)
      begin   

          buf_idin = 'b0;
          size = 'b0;
         buf_sum = 'b0;
    end  
endmodule  
发表于 2011-10-4 20:29:12 | 显示全部楼层
module MEAN(
clk,
rst_n,
idin,
mean_dout,
mean_done
);
input clk,rst_n;
input  [7:0] idin;
output  [7:0] mean_dout;
output  mean_done;

reg  [7:0]  idin_d1;
wire [8:0] sum;
reg            rdone;

assign sum=idin_d1+idin;
assign mean_dout=sum[8:1];
assign mean_done=~rdone;

always @(posedge clk,negedge rst_n)
if(!rst_n)
begin
  idin_d1<=8'd0;
  rdone<=1'b0;
end
else
begin
  idin_d1<=idin;
  rdone<=~rdone;
end

endmodule
没有仿真,不能保证正确。可以参考一下。
发表于 2011-10-4 20:46:11 | 显示全部楼层
更正一下,下面的程序应该是正确的了。
module MEAN(
clk,
rst_n,
idin,
mean_dout,
mean_done
);
input clk,rst_n;
input  [7:0] idin;
output  [7:0] mean_dout;
output  mean_done;

reg  [7:0]  idin_d1;
reg  [8:0] sum;
reg            rdone;

assign mean_dout=sum[8:1];
assign mean_done=~rdone;

always @(posedge clk,negedge rst_n)
if(!rst_n)
begin
  idin_d1<=8'd0;
  rdone<=1'b0;
  sum<=9'd0;
end
else
begin
  idin_d1<=idin;
  sum<=idin_d1+idin;
  rdone<=~rdone;
end

endmodule
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-20 07:50 , Processed in 0.018329 second(s), 9 queries , Gzip On, MemCached On.

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