1、使用QUARTUS软件建立工程:一般建立三个文件夹 ① PRJ (存放工程).qpf ②RTL (存放代码).v ③ SIM(存放仿真文件).v
2、verilog语言程序模块一开始比较固定:module和endmodule是一个模块的开头和结尾,module后面紧接着是该模块的函数名。
数据类型一般就是wire和reg,(输入不能为reg型)
每一段程序块开始处都是always @()开头,一般时序电路,()里就是电平的沿触发:posedge 上升沿,negedge:下降沿
如果是组合逻辑电路,一般是(*),以 *代替该模块中的元素。
/* 注释符号 */
//行注释
module flow_led
(
input wire sys_clk ,
input wire sys_rst_n ,
output reg [3:0] led
);
//reg define
reg [23:0] counter;
//counter
always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
counter <= 1'b0;
else if(counter == 24'd1000_0000)
counter <= 1'b0;
else
counter <= counter + 1'b1;
//led
always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
led <= 4'b0001;
else if(counter == 24'd1000_0000)
led[3:0] << 1;
else
led <= led;
endmodule
3、简单符号: << 左移,>> 右移, = 阻塞赋值符号,<= 非阻塞赋值符号,~ 取反,| 按位取或,& 按位取与,|| 逻辑或, && 逻辑与, ^ 异或,~^ 同或
阻塞赋值号 = 和非阻塞赋值 <= 区别: ① “=”用于parameter 、assign对数值的赋值,②对于时序性电路 一般采用 “<=”,
③在begin --end 串行语句中,<= 不会影响下一条语句的执行,多条语句可以同时运行,但是 = 必须要等到这一条语句结束才能进行下一条语句,每一条 = 语句必须排队完成,不能并列完成。
对于按位运算和逻辑运算,hdlbits练习比较多,多练练可以搞清楚,
&3’b111 == 1&1&1 == 1'b1, &3'b101 == 1&0&1 == 1'b0,
3'b101 & 3'b111 == 3'b101, 3'b100 && 3'b110 == 3'b101,
逻辑运算最终得出的是 “真”或“假” X&& Y :是判断事件X与事件Y是否都为真,最终结果只有1bit:真 1‘b1,假1'b0;
Vectorgates - HDLBits (01xz.net)