首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

菜鸟提问.关于流水线技术

菜鸟提问.关于流水线技术

经典流水线技术设计8位全加器(即5级锁存,4个2位全加器实现的那个),

用ISE仿真,本来在第五个周期上显示结果,可是波形表示第一个时钟周期上就得到了结果.请问要怎样设置时序啊?

谢谢大侠们.

在网上的所谓爱国主义者,网特占三成,粪青占三成.

谢谢版主,是我没说清楚.

CLK测试时钟写入了,但这个例子不是要5个周期后才出结果吗.我在第一个时钟周期时就输出了结果.是否是有什么设置上的错误.

应该不是我写错主程序了,因为这个是照书写的例子并且很多书都有这个例子.

我是初学者,问得可能有此弱弱.也请诸位见谅.

[此贴子已经被作者于2007-5-28 20:44:45编辑过]

在网上的所谓爱国主义者,网特占三成,粪青占三成.

主程序

module add_8bit(sum,cout,a,b,co,clk);
 output [7:0] sum;
 output cout;
 input [7:0] a,b;
 input co,clk;
 reg cout,lc0,lc1,lc2,lc3;
 reg [1:0] ls1,la3,lb3;
 reg [3:0] ls2,la2,lb2;
 reg [5:0] ls3,la1,lb1;
 reg [7:0] la0,lb0,ls4,sum;
 always @ (clk)
  begin
   lc0=co;
   la0=a;
   lb0=b;
  end
 always@(clk)
  begin
   {lc1,ls1}=lc0+la0[1:0]+lb0[1:0];
   la1=la0[7:2];
   lb1=lb0[7:2];
  end
 always@(clk)
  begin
   {lc2,ls2}={lc1+la1[1:0]+lb1[1:0],ls1};
   la2=la1[5:2];
   lb2=lb1[5:2];
  end
 always@(clk)
  begin
   {lc3,ls3}={lc2+la2[1:0]+lb2[1:0],ls2};
   la3=la2[3:2];
   lb3=lb2[3:2];
  end
 always@(clk)
  begin
   {cout,sum}={lc3+la3[1:0]+lb3[1:0],ls3};
  end
endmodule

测试程序

module tp_v;

 // Inputs
 reg [7:0] a;
 reg [7:0] b;
 reg co;
 reg clk;

 // Outputs
 wire [7:0] sum;
 wire cout;
 parameter Delay=100;
 // Instantiate the Unit Under Test (UUT)
 add_8bit uut (
  .sum(sum),
  .cout(cout),
  .a(a),
  .b(b),
  .co(co),
  .clk(clk)
 );

 initial begin
  // Initialize Inputs
  a = 120;
  b = 111;
  co = 1;
  clk = 0;

  // Wait 100 ns for global reset to finish
  #1000
  $finish;
  
      // Add stimulus here

 end
 always
  #(Delay/2) clk=~clk;
     
endmodule

[此贴子已经被作者于2007-5-29 10:09:47编辑过]

在网上的所谓爱国主义者,网特占三成,粪青占三成.

结果不对,因此我又用了移位的法来解决不结果不正确的问题.

还有终于发现了5个消失周期的问题,这个是时序电路.等式要用"<="而不是"="

改了一下中间的代码:

always @(posedge clk)
  begin
   lc0<=co;
   la0<=a;
   lb0<=b;
  end
 always @(posedge clk)
  begin
   {lc1,ls1}<=lc0+la0[1:0]+lb0[1:0];
   la1<=la0[7:2];
   lb1<=lb0[7:2];
  end
 always @(posedge clk)
  begin
   {lc2,ls2}<=(lc1+la1[1:0]+lb1[1:0])*4+ls1;
   la2<=la1[5:2];
   lb2<=lb1[5:2];
  end
 always @(posedge clk)
  begin
   {lc3,ls3}<=(lc2+la2[1:0]+lb2[1:0])*16+ls2;
   la3<=la2[3:2];
   lb3<=lb2[3:2];
  end
 always@(posedge clk)
  begin
   {cout,sum}<=(lc3+la3[1:0]+lb3[1:0])*64+ls3;
  end

这样就正确了.犯了弱智的错误,该打..

[此贴子已经被作者于2007-5-31 17:03:33编辑过]

在网上的所谓爱国主义者,网特占三成,粪青占三成.
返回列表