【FPGA每周一练】FPGA的HDL建模第一周

2019-07-16 00:21发布

FPGA每周一练】FPGA的HDL建模第一练

本次电子发烧友论坛邀请@chenchu0910 ,来和大家一起练习FPGA的HDL建模。

课程简介:这一版的论坛笔记只适合入门者,因为这论坛笔记按着由浅入深编辑的,只适合做入门引子。建议初学者者先从一些权威的参考书去了解“什么是Verlilog HDL 语言”,同时在跟着我们的论坛笔记进行练习,以达到快速理解的目的。FPGA 宛一堆乐高积和Verilog HDL 是自己的手(工具) ,自己可以随心所愿的要怎么拆就怎么拆。


课程分类:

一、基础电路设计;
二、典型常用电路设计;
三、综合运用电路设计。


首先,我们练习基础电路。因为大规模设计就是由像触发器、锁存器、多路选择器、解码器、编码器、饱和/非饱和计数器、FSM等常用基本电路组成。也就是说电路设计,你写到这要的单元就可以啦。在复杂的电路也是由他们构成。所以基础电路是根本,一点要练熟基础。


本周课题:
1、设计一个全加器。
2、四选一的多路选择器
是不是觉得很简单,一蹴而就?答案下周三更新。(您可以随时在网上搜索,但不建议将与他人讨论)

PS:每周我们将在回答的用户中由嘉宾抽取一位幸运用户进行积分奖励!







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
haozix521
1楼-- · 2019-07-17 13:10
采用结构化的方式,先半加器,再全加器
  1. module half_adder (a,b,sum,cout);
  2. input a,b;
  3. output sum,cout;
  4. assign sun = a^b;
  5. assign cout = a&b;

  6. endmodule
复制代码
这是半加器

  1. module full_adder (a,b,cin,sum,cout);
  2. input a,b,cin;
  3. output sum,cout;

  4. wire [1:0]ha_sum , ha_cy;

  5. half_adder U1 (.a(a), .b(b), .sum(ha_sum[1]), .cout(ha_cy[1]));
  6. half_adder U2 (.a(ha_sum[1]), .b(cin), .sum(ha_sum[0]), .cout(ha_cy[0]));

  7. assign sum = ha_sum[0];
  8. assign cont = ha_cy[0] | ha_cy[1];

  9. endmodule
复制代码
这是全加器

全加器.png

半加器

half.png

评分

参与人数 1 +2 收起 理由 chenchu0910 + 2 您的帖子很精彩,期待您分享的下一个帖子!.

查看全部评分

sunedi561
2楼-- · 2019-07-17 15:32
 精彩回答 2  元偷偷看……
sunedi561
3楼-- · 2019-07-17 20:10
跟着一起学习,应该会有很大收获。顺便想问问全加器有什么典型应用
kuangperson
4楼-- · 2019-07-17 23:04
想问一下  写这个全加器和半加器是有什么用途。
sapodillas
5楼-- · 2019-07-18 02:24
    一位全加器

    1. <li>module full_adder(a,b,cin,sum,cout);</li><li>input a,b,cin;</li><li>output sum,cout;</li><li>assign sum <= a^b^c;</li><li>assign cout <= (a&b)|(a^b&c);</li><li>endmodule</li>
    复制代码



  1.     四选一的多路选择器
  2. <ul type="1" class="litype_1"><li>module mux4(a,b,c,d,in,out);</li><li>input a,b,c,d;</li><li>input [1:0] in;</li><li>output reg out;</li><li>assign out = in[1]? (in[0]?d:c) : (in[0]?b:a);</li><li>endmodule</li></ul>
复制代码





评分

参与人数 1威望 +2 积分 +2 收起 理由 chenchu0910 + 2 + 2 您的帖子很精彩,期待您分享的下一个帖子!.

查看全部评分

ppa3278
6楼-- · 2019-07-18 03:03
  1. //1 bit full adder;
  2. module fa1b
  3. (
  4. input wire a,
  5. input wire b,
  6. input wire cfi,
  7. output wire sum,
  8. output wire cfo
  9. );

  10. assign sum = a^b^cfi;
  11. assign cfo= (a&b)|(a^b&cfi);

  12. endmodule

  13. //4 mux
  14. module mux4
  15. (
  16. input wire [3:0]din,
  17. input wire [1:0]s,
  18. output reg dout
  19. );

  20. always @ *
  21. begin
  22.     case(s)
  23.     0 : dout = din<strike>;
  24.     1: dout = din<strike>;
  25.     2 : dout = din<strike>;
  26.     3: dout = din<strike>;
  27.     endcase
  28. end
  29. endmodule</strike></strike></strike></strike>
复制代码



本菜鸟才玩FPGA,期望认识一些大牛,我用的Xilinx的不是Altera的。

一周热门 更多>