ALU 的设计与实现

发布于 2022-09-28 23:52:40 字数 192 浏览 18 评论 0

以前写的一篇东西
http://blog.chinaunix.net/u/11773/showart.php?id=190540

怎样用 Verilog HDL 语言来描述?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

羁〃客ぐ 2022-10-05 23:52:41

串行加法器的延迟太大,特别32位,这样做对速度影响太大。
建议用先行进位加法器。
可以参考《逻辑与计算机设计基础》(美) M. Morris Mano, (美) Charles R. Kime著
里面原理和VHDL代码都有

浴红衣 2022-10-05 23:52:41

那篇东西是很基础的东东,《逻辑与计算机设计基础》我有,只是没看多少页

北方的韩爷 2022-10-05 23:52:41

原帖由 一剑凌云山海情 于 2007-3-31 14:00 发表于 2楼  
串行加法器的延迟太大,特别32位,这样做对速度影响太大。
建议用先行进位加法器。
可以参考《逻辑与计算机设计基础》(美) M. Morris Mano, (美) Charles R. Kime著
里面原理和VHDL代码都有

32位实现每位都先行进位是绝对不现实的。

挽你眉间 2022-10-05 23:52:41

原帖由 cjaizss 于 2007-3-31 23:12 发表于 4楼  

32位实现每位都先行进位是绝对不现实的。

肯定不会每一位都先行进位。看门电路的fanout能力了。
对了,在加法器的设计上,除了这两种方案,还有其他的实现办法吗?

樱花落人离去 2022-10-05 23:52:41

可以用组间先行进位的方法来实现加法器,串行和并行综合而成
也可组间串行。

[ 本帖最后由 cjaizss 于 2007-4-1 18:28 编辑 ]

智商已欠费 2022-10-05 23:52:41

4位串行进位加法器

  1. module ADD_BIT(x,y,cin,s,cout);
  2. input x,y,cin;
  3. output s,cout;
  4. assign s =x ^ y ^ cin;
  5. assign cout = (x & y) | (x & cin) | (y & cin);
  6. endmodule
  7. module ADD_ALL_4bits(X,Y,CIN,S,COUT);
  8. input [3:0] X;
  9. input [3:0] Y;
  10. input CIN;
  11. output [3:0] S;
  12. output COUT;
  13. wire c1,c2,c3;
  14. ADD_BIT ab1 (X[0],Y[0],CIN,S[0],c1);
  15. ADD_BIT ab2 (X[1],Y[1],c1,S[1],c2);
  16. ADD_BIT ab3 (X[2],Y[2],c2,S[2],c3);
  17. ADD_BIT ab4 (X[3],Y[3],c3,S[3],COUT);
  18. endmodule

复制代码
[ 本帖最后由 cjaizss 于 2007-4-1 17:25 编辑 ]

不奢求什么 2022-10-05 23:52:41

完全描述4位先行进位加法器的代码我是写不下去了,写起来比较郁闷

生生漫 2022-10-05 23:52:41

原帖由 cjaizss 于 2007-4-1 17:34 发表于 8楼  
完全描述4位先行进位加法器的代码我是写不下去了,写起来比较郁闷

  来讲讲先行进位的思路吧

提赋 2022-10-05 23:52:41

以下是4位整数的加法器,使用的是组间串行进位。2位一组

  1. module ADD_2bits(X,Y,CIN,S,COUT);
  2. input [1:0] X;
  3. input [1:0] Y;
  4. input CIN;
  5. output [1:0] S;
  6. output COUT;
  7. wire c;
  8. assign c = (X[0] & Y[0]) | ((X[0] | Y[0]) & CIN);
  9. assign COUT = (X[0] & Y[0])
  10.                 | ((X[1] | Y[1]) & (X[0] & Y[0]))
  11.                 |  ((X[1] | Y[1]) & (X[0] | Y[0]) & CIN);
  12. endmodule
  13. module ADD_4bits(X,Y,CIN,S,COUT);
  14. input [3:0] X;
  15. input [3:0] Y;
  16. input CIN;
  17. output [3:0] S;
  18. output COUT;
  19. wire c;
  20. ADD_2bits ADD_2bits_1(X[1:0],Y[1:0],CIN,S[1:0],c);
  21. ADD_2bits ADD_2bits_2(X[3:2],Y[3:2],c,S[3:2],COUT);
  22. endmodule

复制代码
[ 本帖最后由 cjaizss 于 2007-4-1 18:19 编辑 ]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文