holdmyhand 学习FPGA进程
1.收到PCB板及元器件包 9月30日----------------@2楼 2.核心板及接口板焊接完成 10月2日-------------------@3楼
3.USB Blaster的驱动在哪里?--------------------@6楼 4.点亮LED 10月12日---------------------------------------@7楼
5.LED流水灯实验 10月21日-----------------------@8楼 6.LED闪烁灯及跑马灯 10月28日----------------------@10楼
7.LED花样彩灯 10月29日------------------------@12楼 8.数码管静态、动态及模60计数器功能实现 11月5日---@14楼
9.按键控制1为数码管循环显示0-9-------------@15楼
holdmyhand 进程贴 → 按键篇

只看楼主 1楼
关键词: holdmyhand 进程 按键



4楼

5楼
Altera USB Blaster的驱动在这里
安装Quartus II 12.0之后,在安装路径下便有了Altera USB Blaster的驱动文件,其文件夹路径为:XXX\12.0\quartus\drivers...
插上USB Blaster线,若提示驱动安装失败,可采取以下措施:
管理→设备管理器→双击usb blaster→更新驱动程序→浏览计算机以查找驱动文件→在上述路径下搜索→下一步...等待安装成功
安装Quartus II 12.0之后,在安装路径下便有了Altera USB Blaster的驱动文件,其文件夹路径为:XXX\12.0\quartus\drivers...
插上USB Blaster线,若提示驱动安装失败,可采取以下措施:
管理→设备管理器→双击usb blaster→更新驱动程序→浏览计算机以查找驱动文件→在上述路径下搜索→下一步...等待安装成功

6楼
点亮LED,使得间隔的4个LED点亮。
1)建立工程,新建Verilog HDL文件;
2)写代码→保存→Start Analysis&Synthesis;
3)器件选型、设置→分配引脚→Start Compilation;
4)Programmer.
板子现象,截图如下:
1)建立工程,新建Verilog HDL文件;
2)写代码→保存→Start Analysis&Synthesis;
3)器件选型、设置→分配引脚→Start Compilation;
4)Programmer.
板子现象,截图如下:




9楼
1)LED闪烁灯实验.
效果如下,8个LED周期性闪烁(亮→灭1秒,灭→亮1秒,如此循环往复)
2)流水灯实验中,控制实现流水灯效果的赋值语句 led <= led << 1; //左移
对应的实验效果是“向右”流水灯;
跑马灯实验中,控制实现跑马灯效果的赋值语句
led <= {led[6:0], led[7]}; //移位寄存器中完成数据左移一位操作,即(led[7]->led[0], led[0]->led[1], led[1]->led[2], led[2]->led[3], ---, led[6]->led[7])
对应的实验效果是“向右”跑马灯;
问题就是,程序中“左”操作,对应效果是向“右”,个人感觉有些别扭,为了程序中“左”操作,实际效果也是向“左”流水灯或跑马灯,在配置FPGA引脚(Pin Planner)时,可将原理图中 LED1~LED8 所连接的引脚位置倒序,体现在接口板上 D8当作D1,D7当作D2- - - D1当作D8。仅个人观点。
效果如下,8个LED周期性闪烁(亮→灭1秒,灭→亮1秒,如此循环往复)
2)流水灯实验中,控制实现流水灯效果的赋值语句 led <= led << 1; //左移
对应的实验效果是“向右”流水灯;
跑马灯实验中,控制实现跑马灯效果的赋值语句
led <= {led[6:0], led[7]}; //移位寄存器中完成数据左移一位操作,即(led[7]->led[0], led[0]->led[1], led[1]->led[2], led[2]->led[3], ---, led[6]->led[7])
对应的实验效果是“向右”跑马灯;
问题就是,程序中“左”操作,对应效果是向“右”,个人感觉有些别扭,为了程序中“左”操作,实际效果也是向“左”流水灯或跑马灯,在配置FPGA引脚(Pin Planner)时,可将原理图中 LED1~LED8 所连接的引脚位置倒序,体现在接口板上 D8当作D1,D7当作D2- - - D1当作D8。仅个人观点。

10楼
1)LED花样彩灯实验功能完成.
8个LED闪烁两次→向右流水灯→向左跑马灯→两边向内流水→如此循环往复...
2)实际效果如视频所示:
3)程序代码如下,还未进一步精简:
//LED花样彩灯
//holdmyhand 10月28日 16:09:43
module led_hy(sys_clk, sys_rstn, led);
input sys_clk;
input sys_rstn;
output [7:0] led;
reg [7:0] led;
reg [31:0] delay_cnt; //延时计数器
reg [31:0] counter; //计数变量
reg [1:0] current_state, next_state; //LED当前状态,下一状态
reg [3:0] led_h, led_l;
parameter ALL_ON=8'b00000000, ALL_OFF=8'b11111111; //参数定义 符号常量
parameter S0=2'b00, S1=2'b01, S2=2'b10, S3=2'b11;
always @(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
delay_cnt <= 32'd0;
else
begin
if(delay_cnt==32'd24999999)
delay_cnt <= 32'd0;
else
delay_cnt <= delay_cnt + 1'b1;
end
end
always @(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
led <= ALL_OFF;
counter <= 32'd0;
current_state <= S0;
led_h <= 4'b0111;
led_l <= 4'b1110;
end
else
begin
if(delay_cnt==32'd24999999)
begin
case(current_state)
S0:begin
counter <= counter + 1'b1;
if(counter<32'd3)
led <= ~led;
else
begin
counter <= 32'd0;
led <= 8'b01111111;
next_state <= S1;
end
end
S1:begin
led <= led >> 1; //右移
if(led==ALL_ON)
begin
led <= 8'b11111110;
next_state <= S2;
end
end
S2:begin
led <= {led[6:0], led[7]}; //移位寄存器左移一位操作
if(led==8'b01111111)
begin
led <= {led_h, led_l};
next_state <= S3;
end
end
S3:begin
led_h <= led_h >> 1;
led_l <= led_l << 1;
led <= {led_h, led_l};
if(led==ALL_ON)
begin
led_h <= 4'b0111;
led_l <= 4'b1110;
led <= ALL_OFF;
next_state <= S0;
end
end
default:led <= led;
endcase
end
else
led <= led;
current_state <= next_state;
end
end
endmodule
8个LED闪烁两次→向右流水灯→向左跑马灯→两边向内流水→如此循环往复...
2)实际效果如视频所示:
3)程序代码如下,还未进一步精简:
//LED花样彩灯
//holdmyhand 10月28日 16:09:43
module led_hy(sys_clk, sys_rstn, led);
input sys_clk;
input sys_rstn;
output [7:0] led;
reg [7:0] led;
reg [31:0] delay_cnt; //延时计数器
reg [31:0] counter; //计数变量
reg [1:0] current_state, next_state; //LED当前状态,下一状态
reg [3:0] led_h, led_l;
parameter ALL_ON=8'b00000000, ALL_OFF=8'b11111111; //参数定义 符号常量
parameter S0=2'b00, S1=2'b01, S2=2'b10, S3=2'b11;
always @(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
delay_cnt <= 32'd0;
else
begin
if(delay_cnt==32'd24999999)
delay_cnt <= 32'd0;
else
delay_cnt <= delay_cnt + 1'b1;
end
end
always @(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
led <= ALL_OFF;
counter <= 32'd0;
current_state <= S0;
led_h <= 4'b0111;
led_l <= 4'b1110;
end
else
begin
if(delay_cnt==32'd24999999)
begin
case(current_state)
S0:begin
counter <= counter + 1'b1;
if(counter<32'd3)
led <= ~led;
else
begin
counter <= 32'd0;
led <= 8'b01111111;
next_state <= S1;
end
end
S1:begin
led <= led >> 1; //右移
if(led==ALL_ON)
begin
led <= 8'b11111110;
next_state <= S2;
end
end
S2:begin
led <= {led[6:0], led[7]}; //移位寄存器左移一位操作
if(led==8'b01111111)
begin
led <= {led_h, led_l};
next_state <= S3;
end
end
S3:begin
led_h <= led_h >> 1;
led_l <= led_l << 1;
led <= {led_h, led_l};
if(led==ALL_ON)
begin
led_h <= 4'b0111;
led_l <= 4'b1110;
led <= ALL_OFF;
next_state <= S0;
end
end
default:led <= led;
endcase
end
else
led <= led;
current_state <= next_state;
end
end
endmodule
回复
打赏帖 | |
---|---|
汽车电子中巡航控制系统的使用被打赏10分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K146】S32DS RTD 驱动环境搭建被打赏12分 | |
【分享开发笔记,赚取电动螺丝刀】【IAR】libc标注库time相关库函数使用被打赏23分 | |
LP‑MSPM0L1306开发版试用结果被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【LP-MSPM0L1306】适配 RT-Thread Nano被打赏23分 |