1.安装quartus
2.更新usb blaster驱动
3.新建工程
1.随便找一个文件夹,里面新建demo文件夹,表示一个个工程
在demo文件夹里面,新建src(源码),prj(项目),doc(文档)
2.进去quartus里面,点击new project
下面是你的fpga开发板的配置,包括Pin count,Core speed grade
打开工程
"D:\Desktop\fpga\demo2\prj\demo2.qsf"
4.在src文件夹下写.v文件
// demo.v
module demo (// 不写类型,默认wire型input clk,output led
);// 让led是高电平工作assign led=1;
endmodule
5.启动文件
找寻.v文件
开始编译
绑定led和灯
重新编译
点击Device and Pin Options
点击Hardware Setup ,换成usb blaster
点击start启动
5.Verilog语法
常量说明:每一个变量的值就是0或者1
变量定义:
wire:在module中input和output后的变量默认是wire型
rag:如果在always中,才会使用rag
连续赋值:
assign:(主要用于组合逻辑电路)
always:(主要用于时序逻辑电路)
6.实例
启动一个灯
module demo (input clk,output led
);assign led=1;endmodule
启动多个灯
module demo (input clk,output [3:0] led
);assign led=4'b1010;endmodule
流水灯
/*
assign,always都是同时进行的
*/
module demo (input clk,input rst_n, // 复位output reg [3:0] led
);// 开始wire add_cnt_500ms;assign add_cnt_500ms=1'b1;// 结束wire end_cnt_500ms;reg [24:0] cnt_500ms;assign end_cnt_500ms=add_cnt_500ms&&(cnt_500ms==25_000_000-1);// 计数always @(posedge clk or negedge rst_n) begin// 刚开始才会执行该ifif(!rst_n)begin cnt_500ms<=0;endelse if(add_cnt_500ms)beginif(end_cnt_500ms)begincnt_500ms<=0;endelse begincnt_500ms<=cnt_500ms+1;endendend// 跳灯(移位实现)// always @(posedge clk or negedge rst_n) begin// if(!rst_n) begin// led=4'b1000// end// else if(led==4'b0001)begin// led<=4'b1000// end// else if(end_cnt_500ms) begin// led<=(led>>1)// end// end// 挑灯(拼接实现)always @(posedge clk or negedge rst_n) beginif(!rst_n)beginled<=4'b1000;endelse if(end_cnt_500ms)beginled<={led[0],led[3:1]};endend
endmodule