FPGA 电路开发入门实验

该博客介绍了多个FPGA基础实验,包括使用拨码开关控制LED、设计译码器、计数器、时间基准电路、移位寄存器和DDS正弦波生成。通过实验,学生学习了如何编写Verilog代码实现逻辑功能,并通过波形仿真和硬件下载验证设计的正确性。实验涉及组合逻辑、时序逻辑和数字信号处理的基础知识。
摘要由CSDN通过智能技术生成

实验1:项目创建、编译和下载

学生实验:用1个拨码开关控制所有的LED灯亮灭

bdf图:

实验效果:

实验2:FPGA译码器组合逻辑

学生实验:1、放置2个2-4译码器模块,则总共有2组SW, 每组2个,2组LED,每组4个,每组                        SW分别控 制其对应的LED组。

bdf图:

实验效果:

                • 2、参照代码,设计一个3-8译码器,完成类似 的拨码开关实验。注意代码中的信号宽                  度设定。

代码:

module rtl_module(IN,OUT);
input [3-1:0]IN;
output reg [8-1:0]OUT;

always @(IN) begin
    case(IN)
        3'b000: OUT = 8'b00000001;
        3'b001: OUT = 8'b00000010;
        3'b010: OUT = 8'b00000100;
        3'b011: OUT = 8'b00001000;
        3'b100: OUT = 8'b00010000;
        3'b101: OUT = 8'b00100000;
        3'b110: OUT = 8'b01000000;
        3'b111: OUT = 8'b10000000;
        endcase
end
endmodule

实验效果:

                • 3、自行查阅手册中的7段译码器管脚对应关系, 用4个拨码开关控制一个7段译码器的                  数字,从 0-9-A-F,共16个数字和字母。

代码:

module dec_4to16(
  IN       ,   
  OUT       );  
 
input [4-1:0] IN;
output [8-1:0] OUT;
 reg [8-1:0] OUT;
 
always @ (IN) begin
	case(IN)
        4'b0000: OUT = 7'b1000000;	
        4'b0001: OUT = 7'b1111001;	
        4'b0010: OUT = 7'b0100100;	
	    4'b0011: OUT = 7'b0110000;	
        4'b0100: OUT = 7'b0011001;	
        4'b0101: OUT = 7'b0010010;	
        4'b0110: OUT = 7'b0000010;	
        4'b0111: OUT = 7'b1111000;	
	    4'b1000: OUT = 7'b0000000;	
        4'b1001: OUT = 7'b0010000;	
        4'b1010: OUT = 7'b0001000;	
        4'b1011: OUT = 7'b0000011;	
        4'b1100: OUT = 7'b1000110;	
        4'b1101: OUT = 7'b0100001;	
        4'b1110: OUT = 7'b0000110;	
        4'b1111: OUT = 7'b0001110;	
   endcase
   end
   endmodule

实验3:计数器波形仿真和signalTap

学生实验:

               1、参照代码,设计一个0-17的计数器,当 计数值为17的时候,OV输出1,其他输出0,                 注意设定合理的信号位宽。

代码:

module cnt_0to17(
  CLK   ,  
  CNTVAL,  
  OV    );  
input CLK;
output [4:0] CNTVAL;
output OV;

reg [4:0] CNTVAL;
reg OV;

always @ (posedge CLK) begin
  if(CNTVAL >= 17)
    CNTVAL <= 0;
  else
    CNTVAL <= CNTVAL + 1'b1;
end

always @ (CNTVAL) begin
  if(CNTVAL ==17)
    OV = 1'b1;
  else
    OV = 1'b0;
end
endmodule 

RTL Viewer:

仿真图像:

signaltap的图像:

           

              2、针对以上计数器,修改输出逻辑,当计 数值为0-8时,OV输出0,9-17时OV输出1

                    用SignalTap验证

                    尝试并思考,如果时钟是50MHz,把OV接 到一个LED上,能看见什么现象,为什么?

代码:

module cnt_0to17(
  CLK   ,  
  CNTVAL,  
  OV    );  
input CLK;
output [4:0] CNTVAL;
output OV;

reg [4:0] CNTVAL;
reg OV;

always @ (posedge CLK) begin
  if(CNTVAL >= 17)
    CNTVAL <= 0;
  else
    CNTVAL <= CNTVAL + 1'b1;
end

always @ (CNTVAL) begin
  if(CNTVAL >=9)
    OV = 1'b1;
  else
    OV = 1'b0;
end
endmodule

RTL Viewer:

仿真图像:

signaltap的图像:

如果时钟是50MHz,把OV接 到一个LED上,由于频率太高,会看不出灯在闪烁。

实验4:时间基准电路和带使能的多周期计数器

1、参照代码,把后级计数器的计数范围改为0-15。 

代码:

module cnt_en_0to15(
  CLK   ,   
  CNTVAL,  
  EN    ,
  OV    );  
input CLK;
input EN;
output [4-1:0] CNTVAL;
output OV;

reg [4-1:0] CNTVAL;
reg OV;

always @ (posedge CLK) begin
  if(EN) begin  
    if(CNTVAL >= 15)
      CNTVAL <= 0;
    else
      CNTVAL <= CNTVAL + 1'b1;
  end
  else
    CNTVAL <= CNTVAL ;  
end

always @ (CNTVAL) begin
  if(CNTVAL == 15)
    OV = 1'b1;
  else
    OV = 1'b0;
end
endmodule  

2、把计数器的0-15计数值经过译码,在DE0 的 HEX LED上显示成0-9-A-F的十六 进制数 。

bdf图:

实验效果:

3、修改时间基准发生器,设计一个使用2个HEX LED,精度为0.1秒,范围为0-9.9秒的计时秒表。

4、自行设计上面计时器的附加控制功能(清零、暂 停)。

bcd图:

实验效果:

实验5:多周期时序逻辑 移位寄存电路

学生实验:

编译下载电路观察现象

拨动SW0开关,观察LED的闪烁变换情况

设计新的功能 – 在原有的电路基础上,添加方向选择功能。

– SW0仍然是移位寄存器组的输入 – 使用SW1开关,控制移位寄存的方向

– 从实验现象上应当能够看到,SW1可以控制LED闪烁的 移动方向,以及控制SW0值的对LED组的输入位置(即 从LED组的最左边或是最右边)

bcd图:

实验效果:

实验6:计数器、ROM和DDS

学生实验1:

电路的工作时钟是fsys = 50MHz, 拨动开关,观察丌同频率的 正弦波

– 参考设计中,计数器和ROM 地址 都是 7 比特,连接关系如上图所示

– 根据理论分析和实验结果,回答以下问题 – 请回答,你能得到的正弦波频率和计数器增量值的对应关系是什么? 

设输出正弦波频率为f1,电路系统时钟为 fsys, 计数器步进增量为 CNT • 请给出 f1 和 fsys 以及 CNT 关系的数学表达式 – 请回答,你能得到的最低频率的正弦波是多少?

增量为1时:

增量为2时:

增量为4时:

由波形可以看出计数增量越大,产生的正弦波波形的频率就越高。

当增量为1时,正弦波的频率为50Mhz/128。

表达式的关系为f1=fsys*CNT/128。

学生实验2:

时钟频率保持fsys = 50MHz 丌变,

修改电路,把计数器的计数值和输入的计数增量信号都改为9比特, 计数值的高7位连接ROM的地址线,低2位悬空。如上图所示。

– 把9比特的计数器增量输入信号连接到9个拨码开关上 – 根据理论分析和实验结果,回答以下问题 – 请回答,你能得到的正弦波频率和计数器增量值的对应关系是什么?

设输出正弦波频率为f1,电路系统时钟为 fsys, 计数器步进增量为 CNT

请给出 f1 和 fsys 以及 CNT 关系的数学表达式

– 请回答,在这种连接方式下,你能得到的最低频率的正弦波是多少?

增量为1时:

增量为2时:

增量为4时:

表达式的关系为f1=fsys*CNT/512.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值