verilog基础语法

顺序块:块中的语句按从前到后一条接一条执行

    begin
    .
    .
    .
    end

并行块:块中的语句同时开始执行

    fork
    .
    .
    .
    join

repeat循环:一个存储器的初始化也可以用repeat

reg [7:0] mem [3:0];
initial begin
    i=0;
    
    repeat(4)
    begin
        mem[i]=0;
        i=i+1;
    end
end

forever循环 :表示 永远循环,直到仿真结束, 与always的区别是,forever 必须在initial或always结构中使用。

initial begin
    clk=0;
    forever #10 clk=~clk;
end

非阻塞性赋值:

特点是:1.同一时间点,前面语句的赋值不能立刻被后面的语句使用。                                                                                                                 2.所以的赋值是在一个时间点结束的时候统一完成的。

如下面的代码,仿真器的执行结果是:

在仿真0时刻,将赋值语句右侧的值0赋给某个临时寄存器中,a并未被赋值。                                                                                                  在仿真0时刻,将赋值语句右侧的值1赋给某个临时寄存器中,b并未被赋值。                                                                                                  在仿真0时刻,将赋值语句右侧的值{a,b}赋给某个临时寄存器中,但是a,b并未真正赋值,所以c得到的是a,b的旧值。                                    在仿真结束时,将临时寄存器的值赋值给左侧。                            

initial begin
    a<=0;
    b<=1;
    c<={a,b};
end

 task任务

task 任务名称;
input [宽度声明] 输入信号名;
output [宽度声明] 输出信号名;
inout [宽度声明] 双向信号名;
reg 任务所用变量声明;

begin
    任务包含的语句   
end

endtask

举例说明,4位全加器的任务

task add4;
input [3:0] x,y;
input cin;
output [3:0] s;
output cout;


begin
    {cout,s}=x+y+cin;  
end

endtask

对任务进行调用,abcde按顺序给x y cin s cout进行赋值

add4(a,b,c,d,e);

函数:函数不可以调用任务,组合逻辑仅可以写成函数,函数至少需要一个输入信号,没有输出信号。

//函数的声明格式
function 返回值的类型和范围 函数名;
input [端口范围] 端口声明;
reg、 interge等变量声明;

begin
    阻塞赋值语句块
end

endfunction

举例说明,计算阶乘的函数

function integer factorial;//定义为整型
input [3:0] a;//定义输入信号
integer i;//定义函数内部变量

begin
    factorial=1;
    for(i=2;i<=a;i=i+1)
      factorial=i*factorial;
end

endfunction

函数的调用

out=function(a);

随机函数

语法形式,seed是一个32位有符号的整型数值

$random(seed);

举例说明,给1024个存储器给随机值

integer i;
reg [7:0] men [0:1023];
initial begin
    i=0;
    repeat(1024)
        begin
            men[i]=$random;
            i=i+1;
        end
end

假如想生成某个范围的数值,得到一个-63——+63的随机数。

rand=$random%64;

可以用以下方法,得到0-63的数值

reg [7:0] rand;
rand={$random}%64;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(fpga笔记)