FPGA 电路开发入门实验

本文通过一系列实验,介绍了FPGA开发的基础知识,包括项目创建、译码器逻辑、计数器波形仿真、时间基准电路、移位寄存器和DDS(直接数字频率合成)设计。实验覆盖了从简单的输入输出控制到复杂逻辑电路的实现,适合初学者逐步掌握FPGA开发技能。
摘要由CSDN通过智能技术生成

文章目录

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

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

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

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

实验5:多周期移位寄存电路

实验6:计数器、ROM和DDS


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

实验内容:设计一根可编程导线,用1个拨码开关控制所有的LED灯亮灭

新建bdf文件,放入1个input管脚,再放入10个output管脚和input相连。

RTL图:

查阅DE0手册中的管脚对应,指派管脚,编译下载。


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

1.2个2-4译码器控制LED

1.用Verilog编写2-4译码器:

module dec_2to4(
IN  ,
OUT);
input  [2-1:0] IN  ;
output [4-1:0] OUT ;
reg [4-1:0] OUT ;

always @ (IN) begin
  case(IN)
    2'b00: OUT = 4'b 0001;
    2'b01: OUT = 4'b 0010;
    2'b10: OUT = 4'b 0100;
    2'b11: OUT = 4'b 1000;
  endcase
end

endmodule // module dec_2to4;

2.为代码文件创建符号(symbol),用于在bdf文件中调用。

3.放入input和output,连线,指派管脚

 RTL图:

2.1个3-8译码器控制LED

1.用Verilog编写3-8译码器:

module decoder(
IN,
OUT
);
input [2:0]IN;
output [7:0]OUT;
reg [7: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

2.为代码文件创建符号(symbol),用于在bdf文件中调用。

 3.放入input和output,连线,指派管脚,编译下载。

RTL图:

3.4个拨码开关控制7段数码管

1.用Verilog编写4-7译码器:

module dec4_7(
IN,
OUT);

input [3:0]IN;
output [6:0]OUT;
reg [6: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

2.为代码文件创建符号(symbol),用于在bdf文件中调用。

3. 放入input和output,连线,指派管脚

 RTL图:

 


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

1.设计一个0-17的计数器

1.用Verilog写出0-17计数器,并生成symbol

module cnt_0to17(
  CLK   ,   // clock
  CNTVAL,   // counter value
  OV    );  // overflow
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   // module cnt_0to17

 2.新建bdf文件,连线,编译

3.用SignalTap验证

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值