Verilog HDL01——FPGA电路开发实验初步使用

FPGA 入门操作和基本电路,包括Quartus项目创建, 下载电路, SignaltapTAP调试,以及简单的移位寄存器和计数器逻辑设计。


一、实验 

开发板Cylcon III EP3C16F484C6

1、新建 

新建项目工程,设置开发板的型号

新建Block Diagram文件

新建Verilog HDL File

2、代码&电路

在Verilog HDL File中写代码,生成自定义的模块加入到Block Diagram(如图)

双击界面,在Project中可以找到自定义的模块

 Block Diagram中连接电路,加入输入和输出引脚,可以使用总线的方式把多根线放在一个输入中

 更改名称即可实现(如图)

3、配置 

 配置引脚,按照开发板对应的说明书配置

 要记得设置不用的管脚为三态,否则LED不使用却会微微发亮 (图片上传失败)

4、开发板执行

点击Programmer烧代码,选择USB端口连接,第一次使用需要更新一个驱动

找到电脑的设备管理器->找USB样子的选项,选Altera USB-Blaster(原图圈错了)

programmer界面中点击Hardware Setup连接USB,连接好后可以点击start,进度100%后可以在开发板上执行代码定义的操作。

5、signalTap的使用

https://blog.csdn.net/weixin_49480182/article/details/118636889

二、我的板子部分管脚的截图

(只是为了我的方便查看,还有好多管脚没有截图)

1、开关管脚

 2、按钮管脚

 3、绿色LED灯

 4、7位数码管

这个板子是共阴极的

代码是4输入7位数码管输出0-9-A-F

module LEDS4_7(
  IN       ,   // input 1
  OUT       );  // out data
 
input [4-1:0] IN;
output [7-1:0] OUT;
 
reg [7-1:0] OUT;
 
always @ (IN) begin
	case(IN)
        4'b0000: OUT = 7'b1000000;	//0
        4'b0001: OUT = 7'b1111001;	//1
        4'b0010: OUT = 7'b0100100;	//2
		4'b0011: OUT = 7'b0110000;	//3
        4'b0100: OUT = 7'b0011001;	//4
        4'b0101: OUT = 7'b0010010;	//5
        4'b0110: OUT = 7'b0000010;	//6
        4'b0111: OUT = 7'b1111000;	//7
		4'b1000: OUT = 7'b0000000;	//8
        4'b1001: OUT = 7'b0010000;	//9
        4'b1010: OUT = 7'b0001000;	//A
        4'b1011: OUT = 7'b0000011;	//b
        4'b1100: OUT = 7'b1000110;	//C
        4'b1101: OUT = 7'b0100001;	//d
        4'b1110: OUT = 7'b0000110;	//E
        4'b1111: OUT = 7'b0001110;	//F
	endcase
end
 
endmodule

  

5、时钟 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抱歉,作为AI语言模型,我没有能力提供完整的代码,但是我可以给出一些提示: 首先,您需要确定您的数码管类型和连接方式。然后,您需要编写一个计时器模块,该模块将计算时间并将其转换为可显示的格式。最后,您需要编写一个显示模块,该模块将从计时器模块中获取数据并将其显示在数码管上。 以下是一个简单的计时器模块示例: ```verilog module timer( input clk, input rst, output reg [3:0] seconds, output reg [3:0] minutes ); reg [3:0] sec_count; reg [3:0] min_count; always @(posedge clk) begin if (rst) begin sec_count <= 0; min_count <= 0; end else if (sec_count == 9) begin sec_count <= 0; if (min_count == 9) begin min_count <= 0; end else begin min_count <= min_count + 1; end end else begin sec_count <= sec_count + 1; end end assign seconds = sec_count; assign minutes = min_count; endmodule ``` 这个计时器模块将每秒钟增加一个计数器。如果到达9秒,它将归零并增加分钟计数器。如果分钟计数器到达9,则它也将归零。 接下来,您需要编写一个显示模块,该模块将从计时器模块中获取数据并将其显示在数码管上。这个模块将根据您使用的数码管类型和连接方式而有所不同,但以下是一个基本的示例: ```verilog module display( input clk, input rst, input [3:0] seconds, input [3:0] minutes, output reg [6:0] segment_data, output reg [3:0] digit_select ); reg [3:0] sec_count; reg [3:0] min_count; timer timer_inst( .clk(clk), .rst(rst), .seconds(sec_count), .minutes(min_count) ); reg [6:0] seg_data; reg [3:0] dig_sel; always @(posedge clk) begin if (rst) begin seg_data <= 7'b0000000; dig_sel <= 4'b1111; end else begin case (dig_sel) 4'b1110: seg_data <= get_segment_data(seconds[0]); //个位 4'b1101: seg_data <= get_segment_data(seconds[1]); //十位 4'b1011: seg_data <= get_segment_data(minutes[0]); //百位 4'b0111: seg_data <= get_segment_data(minutes[1]); //千位 endcase dig_sel <= dig_sel << 1; if (dig_sel == 4'b1000) begin dig_sel <= 4'b1110; end end end function [6:0] get_segment_data; input [3:0] value; begin case (value) 4'b0000: get_segment_data = 7'b0111111; 4'b0001: get_segment_data = 7'b0000110; 4'b0010: get_segment_data = 7'b1011011; 4'b0011: get_segment_data = 7'b1001111; 4'b0100: get_segment_data = 7'b1100110; 4'b0101: get_segment_data = 7'b1101101; 4'b0110: get_segment_data = 7'b1111101; 4'b0111: get_segment_data = 7'b0000111; 4'b1000: get_segment_data = 7'b1111111; 4'b1001: get_segment_data = 7'b1101111; default: get_segment_data = 7'b0000000; endcase endfunction assign segment_data = seg_data; assign digit_select = dig_sel; endmodule ``` 在这个显示模块中,我们使用一个计时器实例来获取计时器模块的数据。然后,我们使用一个状态机来选择要显示的数字,并将其转换为数码管段数据。我们还需要实现一个get_segment_data函数,该函数将数字转换为数码管段数据。 最后,您需要将计时器模块和显示模块组合在一起,并将其连接到您的数码管。这个步骤将根据您的具体硬件设置而有所不同,但以下是一个示例: ```verilog module top( input clk, input rst, output [6:0] segment_data, output [3:0] digit_select, output [7:0] led ); display display_inst( .clk(clk), .rst(rst), .seconds(seconds), .minutes(minutes), .segment_data(segment_data), .digit_select(digit_select) ); timer timer_inst( .clk(clk), .rst(rst), .seconds(seconds), .minutes(minutes) ); assign led = {minutes, seconds}; endmodule ``` 在这个顶层模块中,我们将计时器模块和显示模块实例化,并将其连接到数码管和LED显示器。最后,我们将分钟和秒钟的值组合成一个8位LED值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值