使用Quartus II进行FPGA实验之Switches, Lights, and Multiplexers

使用Quartus设计FPGA,简单包括以下流程:

  1. 新建工程写代码
  2. 编译工程找错误
  3. 分配引脚重编译
  4. 下载配置到硬件

为保证设计的正确性,在编译后,一般还需要做仿真验证,然后下载至硬件,有两种仿真方式:
- 功能仿真
- 时序仿真

https://blog.csdn.net/alexanderrr/article/details/51615254

Quartus II软件可以使用原理图形式和RTL级代码来设计FPGA,使用原理图可以直接调用FPGA上的资源,省去了一些模块的编写。一般采用写Verilog代码的形式来设计FPGA。

简单列出Quartus II操作步骤:

新建工程  \rightarrow 选择FPGA开发板Cyclone IV EP4CE115F29C7 \rightarrow finish \rightarrow 新建一个Verilog文件(保持这个文件名和顶层模块名相同)\rightarrow写好代码点绿色三角编译 \rightarrow 在files标签页将此文件设置为顶层文件 \rightarrow debug编译成功

至此就可以分配引脚后重编译烧到板子里了。


几个简单的练习:

五选一选择器

使用Quartus II进行FPGA实验之Switches, Lights, and Multiplexers_第1张图片

X选一的选择器是比较简单的电路,可以通过直接观察真值表使用case语句来描述电路,要求如下:

使用Quartus II进行FPGA实验之Switches, Lights, and Multiplexers_第2张图片

 

module part3(
	input [17:0]SW,//	S2 S1 S0 U V W X Y
	output [17:0] LEDR,// indicte sw state
	output reg[2:0]LEDG// M
	);
	
	assign LEDR = SW;
	
	always@(*)
		casez(SW[17:15])
			3'b000: LEDG[2:0] = SW[14:12];
			3'b001: LEDG[2:0] = SW[11:9];
			3'b010: LEDG[2:0] = SW[8:6];
			3'b011: LEDG[2:0] = SW[5:3];
			3'b1??: LEDG[2:0] = SW[2:0];
		endcase
endmodule

数码管控制电路

使用Quartus II进行FPGA实验之Switches, Lights, and Multiplexers_第3张图片

使用Quartus II进行FPGA实验之Switches, Lights, and Multiplexers_第4张图片

 数码管的控制也可用case语句把真值表描述下来,输出直接连接到数码管即可:

module part4(
	input [2:0]SW,//c2 c1 c0
	output reg[0:6]HEX0_D
	);
	always@(*) begin
		HEX0_D = 'b1;// not work
		case(SW[2:0])
			3'b000: HEX0_D = 7'b1001000;//H
			3'b001: HEX0_D = 7'b0110000;//E
			3'b010: HEX0_D = 6'b1110001;//L
			3'b011: HEX0_D = 6'b0000001;//O?
		endcase
	end
endmodule
		

同时控制5个数码管

使用Quartus II进行FPGA实验之Switches, Lights, and Multiplexers_第5张图片

题目要求用了非常多的端口去控制5个数码管来显示英文单词HELLO,但是从真值表可以看到直接用case语句就可以实现:

使用Quartus II进行FPGA实验之Switches, Lights, and Multiplexers_第6张图片

 

module part5 (
	input [17:15] SW, // toggle switches
	output reg[0:6] HEX0_D,HEX1_D,HEX2_D,HEX3_D,HEX4_D //5 7-seg displays
);
	parameter H = 7'b1001000;
	parameter E = 7'b0110000;
	parameter L = 7'b1110001;
	parameter O = 7'b0000001;
	
	always@(*) begin
		{HEX0_D,HEX1_D,HEX2_D,HEX3_D,HEX4_D} = 'b1;// not display,blank
		case(SW[17:15])
			3'b000: {HEX0_D,HEX1_D,HEX2_D,HEX3_D,HEX4_D} = {H,E,L,L,O};
			3'b001: {HEX0_D,HEX1_D,HEX2_D,HEX3_D,HEX4_D} = {E,L,L,O,H};
			3'b010: {HEX0_D,HEX1_D,HEX2_D,HEX3_D,HEX4_D} = {L,L,O,H,E};
			3'b011: {HEX0_D,HEX1_D,HEX2_D,HEX3_D,HEX4_D} = {L,O,H,E,L};
			3'b100: {HEX0_D,HEX1_D,HEX2_D,HEX3_D,HEX4_D} = {O,H,E,L,L};
		endcase
	end
endmodule

 做完了实验一值得注意的有以下几点:

  • 实体名称未定义的报错是因为没有设置Verilog文件为顶层设计文件,参上。
  • case语句适用于较为复杂的电路,简单电路直接用连续赋值语句条件语句即可完成选择。
  • 使用case语句一定要设置默认值,避免锁存器的产生。可以case前赋值,也可以最后写default项。

下面贴几张开发板照片:

使用Quartus II进行FPGA实验之Switches, Lights, and Multiplexers_第7张图片

 使用Quartus II进行FPGA实验之Switches, Lights, and Multiplexers_第8张图片

 

你可能感兴趣的:(FPGA实验)