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

2019-07-16 00:21发布

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

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

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


课程分类:

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


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


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

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







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
小麦地
1楼-- · 2019-07-16 05:29
我来回答第一题:
  1. 1位二进制全加器:
  2. 先做一个底层设计:
  3. library ieee;
  4. use ieee.std_logic_1164.all;
  5. entity or2a is
  6. port(a,b:in std_logic;
  7. c:out std_logic):
  8. end;
  9. architecture one of or2a is
  10. begin
  11. c<=a or b;
  12. end;
  13. 然后是顶层设计
  14. LIBRARY  IEEE;
  15. USE IEEE.STD_LOGIC_1164.ALL;
  16. ENTITY f_adder IS
  17. PORT ( ain,bin,cin :IN STD_LOGIC;
  18.           cout, sum :OUT STD_LOGIC);
  19. END ENTITY f_adder;
  20. ARCHITECTURE fa1 OF f_adder IS
  21. COMPONENT h_adder
  22. PORT (a,b:IN STD_LOGIC;
  23.        co,so :OUT STD_LOGIC);
  24. END COMPONENT ;
  25. COMPONENT or2a
  26.   PORT (a,b: IN STD_LOGIC;
  27.           c: OUT STD_LOGIC);
  28. END COMPONENT ;
  29. SIGNAL d,e,f :STD_LOGIC ;
  30. BEGIN
  31.   u1 : h_adder PORT MAP (a=>ain,b=>bin,co=>d,so=>e) ;
  32.   u2 : h_adder PORT MAP (a=>e,b=>cin,co=>f,so=>sum) ;
  33.   u3 : or2a    PORT MAP (a=>d,b=>f,c=>cout) ;
  34. END ARCHITECTURE fa1;
  35. 注意元件例化,要打包底层设计
复制代码

评分

参与人数 1积分 +5 收起 理由 A670521546 + 5 太给力了

查看全部评分

我是棋手
2楼-- · 2019-07-16 08:31
首先是半加器
  1. module h(
  2. input a,b,cin,
  3. output sum,out);
  4. assign sum=a^b^cin;
  5. assign out=a&b+b&cin+a&cin;
  6. endmodule
  7. 然后是顶层例化
  8. module ADD (a,b,cin,sum,out);
  9. parameter SIZE=4;
  10. input[SIZE:1] a,b;
  11. output[SIZE:1]sum;
  12. input cin;
  13. output out;
  14. wire [SIZE:1] temp;
  15. h
  16.     add1(.a(a[1]),.b(b[1]),.cin(cin),
  17.          .sum(sum[1]),.out(temp[1])
  18.              ),
  19.          add2(.a(a[2]),.b(b[2]),.cin(temp[1]),
  20.          .sum(sum[2]),.out(temp[2])
  21.                         ),
  22.          add3(.a(a[3]),.b(b[3]),.cin(temp[2]),
  23.          .sum(sum[3]),.out(temp[3])
  24.          ),
  25.          add4(a[4],b[4],temp[3],sum[4],out);               
  26. endmodule
复制代码

我是棋手
3楼-- · 2019-07-16 14:08
有空把选择器补上
我是棋手
4楼-- · 2019-07-16 18:26
 精彩回答 2  元偷偷看……
小白报道
5楼-- · 2019-07-16 20:45
全加器顶层文件
  1. library ieee;
  2. use ieee.std_logic_1164.all;

  3. entity f_adder is
  4.   port(ain,bin,cin:in std_logic;
  5.           cout,sum:out std_logic);
  6. end f_adder;

  7. architecture fd1 of f_adder is
  8.   component h_adder
  9.     port(a,b:in std_logic;
  10.         c0,s0:out std_logic);
  11.   end component;
  12.   component or2a
  13.     port(a,b:in std_logic;
  14.            c:out std_logic);
  15.   end component;
  16. signal d,e,f:std_logic;
  17.   begin
  18.    u1:h_adder port map (a=>ain,b=>bin,c0=>d,s0=>e);
  19.    u2:h_adder port map (a=>e,b=>cin,c0=>f,s0=>sum);
  20.    u3:or2a   port map (a=>d,b=>f,c=>cout);
  21. end fd1;
复制代码

半加器文件
  1. library ieee;
  2. use ieee.std_logic_1164.all;

  3. entity h_adder is
  4. port(a,b:in std_logic;
  5.      c0,s0:out std_logic);
  6. end h_adder;

  7. architecture fh1 of h_adder is
  8.   begin
  9.     s0<=not (a xor (not b));
  10.     c0<=a and b;
  11. end fh1;
  12. 或门
  13. library ieee;
  14. use ieee.std_logic_1164.all;

  15. entity or2a is
  16.   port(a,b:in std_logic;
  17.          c:out std_logic);
  18. end or2a;

  19. architecture b of or2a is
  20.   begin
  21.     c<=a or b;
  22. end b;
复制代码
小白报道
6楼-- · 2019-07-16 20:50
verilog实现的四选一程序
  1. module mux(a,b,c,d,s,o);
  2. input a,b,c,d;
  3. input [1:0] s;
  4. output o;
  5. reg o;
  6. always @(a or b or c or d or s)
  7.   begin
  8.     case(s)
  9.       2'b00:o=a;
  10.       2'b01:o=b;
  11.       2'b10:o=c;
  12.       default:o=d;
  13.     endcase
  14.   end
  15. endmodule
复制代码

一周热门 更多>