1(2)verilog语法基础

语法介绍

可综合与不可综合

可综合的verilog语法:语法可以综合成实际的电路

  1. 组合逻辑:由一堆逻辑单元实现
  2. 时序逻辑:由寄存器(D触发器)实现,如always@ (posedge i_clk) b<=a;只有在时钟上升沿才会把值输出出去,否则就一直存着

不可综合的verilog语法:语法不可综合成实际的电路
如a<= #1 b; 这个延时1ns是无法实现的,FPGA中没有延时单元

运算

注:FPGA中不能直接用组合逻辑设计除法、取余运算电路,需要结合时序逻辑,可能需要多个时钟周期

阻塞和非阻塞

点击查看代码
//组合逻辑使用阻塞赋值
assign w_d = 1;
assign w_e = w_d;

//时序逻辑使用非阻塞赋值(并行)
always @(posedge i_clk)
    begin
        r_a <= 1;
        r_b <= r_a; //r_b会慢一个时钟周期变为1
    end

非阻塞示意图如下:

总结:r_b数值比r_a数值慢一拍,因为r_a输出有延迟,1还没有到r_b数据端口时r_b就已经读取完数据了,所以输出是0,在下一个时钟上升沿会变成1

注:若出现always @(*),则这样的话只要下面的信号改变就会赋值,这种写法和组合逻辑是等效的。reg型只能写在always里,assign只能用于wire型

按位与、或

r_a <= &r_a;
r_a <= |r_a;
若r_a为1010,则第一个结果为0,第二个结果为1
功能:判断信号内的1和0

case语句

点击查看代码
always @(posedge i_clk)
    case(r_a)
        1 :begin
            r_b <= 1;
        end
        2 :begin
            r_b <= 2;
        end
        default :begin
            r_b <=3 ;
        end
    endcase
主要记一下这个写法,有时候可能会写错符号
posted @ 2024-11-20 13:52  xuxuxu69  阅读(7)  评论(0编辑  收藏  举报