日记2

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)

上一篇:OV5640上电控制


下一篇:Servlet过滤器使用实例(防止用户恶意登录)