【FPGA每周一练汇总帖】FPGA的HDL建模持续更新

2019-07-16 00:18发布

FPGA每周一练汇总帖】FPGA的HDL建模持续更新

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

第一周:
1、设计一个全加器。
  1. <font color="#000000">module MUX( C,D,E,F,S,out);
  2.         input                         C,D,E,F ;         //input
  3.         input         [1:0]         S ;                 //select

  4. control
  5.         output         reg         out ;                 //result

  6. //___________________cut_______________________//
  7. always@(C or D or E or F or S)
  8.         begin
  9.                 case (S)
  10.                         2'b00 : Mux_out = C ;
  11.                         2'b01 : Mux_out = D ;
  12.                         2'b10 : Mux_out = E ;
  13.                         default : Mux_out = F ;
  14.                 endcase
  15.         end</font>
  16. <font color="#ff0000">endmodule</font>
复制代码
2、四选一的多路选择器
  1. module fulladd(cout, sum, ain, bin, cin);
  2.         input                 ain, bin, cin;                //input
  3.         output                 sum, cout;                        
  4.         
  5.         wire                 sum;                                //summation
  6.         wire                 cout;                                //carry output
  7. //________________________cut__________________________//
  8. assign sum = ain ^ bin ^ cin;
  9. assign cout = (ain & bin) | (bin & cin) | (ain & cin);

  10. endmodule
复制代码第二周:1、设计一个10进制计数器;
  1. module count(clk,rstn,en,dout);
  2.   input                                        clk,rstn,en;
  3.   output        reg        [4:0]        dout;
  4.   
  5. always@(posedge clk or negedge rstn)
  6.         if (!rstn)
  7.                 dout<=4'b0000;
  8.         else
  9.                 if(en==1'b1)
  10.                         begin
  11.                         if(dout==4'b1010)
  12.                                 dout<=4'b0000;
  13.                         else
  14.                                 dout<=dout+1;
  15.                         end
  16. endmodule
复制代码
2、设计3-8译码器。


  1. module decode(Ain,en,dout);
  2.   input                                [2:0]         Ain;
  3.   input                                                en;
  4.   output        reg                [7:0]        dout;
  5.   
  6. always@(en or Ain)
  7.         if(en==1'b1)
  8.                 case(Ain)
  9.                         3'b000: dout <= 8'b11111110;
  10.                         3'b001: dout <= 8'b11111101;
  11.                         3'b010: dout <= 8'b11111011;
  12.                         3'b011: dout <= 8'b11110111;
  13.                         3'b100: dout <= 8'b11101111;
  14.                         3'b101: dout <= 8'b11011111;
  15.                         3'b110: dout <= 8'b10111111;
  16.                         3'b111: dout <= 8'b01111111;
  17.                 endcase
  18.     else
  19.          dout<=8'b11111111;
复制代码第三周:用Verilog HDL设计                                                                                                              1、8位循环移位寄存器
  1. <font color="#000000">module shift
  2.         (
  3.         input                                clk,rstn,
  4.         output        reg        [7:0]                dout
  5.         );</font>
  6. <font color="#000000">/***************************************/</font>
  7. <font color="#000000"> always@(posedge clk or negedge rstn)</font>
  8. <font color="#000000">        begin</font>
  9. <font color="#000000">        if(!rstn)</font>
  10. <font color="#000000">                dout[7:0]<=8'b00000001;</font>
  11. <font color="#000000">        else</font>
  12. <font color="#000000">                dout[7:0]<={dout[6:0],dout[7]};</font>
  13. <font color="#000000">        end</font>
  14. <font color="#000000">/***************************************/</font>
  15. <font color="#000000">endmodule</font>
复制代码2、D触发器(上升沿触发)

  1. <font color="#000000">module d
  2.         (
  3.         input        clk,clr,din,
  4.         output        q;
  5.         );
  6.         reg din,q;
  7. /***************************************/
  8. always@(posedge clk)
  9.         if(clr)
  10.                 q<=0;
  11.         else
  12.                 q<=din;
  13. /***************************************/        
  14. endmodule</font>
复制代码
更多内容:
【FPGA每周一练】FPGA的HDL建模第一周

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

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

【FPGA每周一练】第四周:用Verilog HDL设计




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。