verilog基础语法

verilog基础语法

  • 线网 wire
wire flag;
wire flag_a=1'b1;
//wire:表示硬件单元与单元之间的物理连线,由其连接的器件输出端连续驱动
//不常用的线网类型:wand,wor,wri,triand,trior,trireg
  • 寄存器类型 reg
reg flag;
//reg 用来表示存储单元,他会保持数据原有的值,直到被改写
//在always块中,只能使用寄存器变量类型
//寄存器不需要驱动源也不一定需要时钟信号,寄存器的值可以在任意时刻赋值来改写
  • 向量
    • 位宽>1,wire和reg类型声明为向量形式
    • 指定某一位或者相邻位作为其他逻辑使用
    • 支持指定bit位后固定位宽向量域选择访问呢
   reg [3:0] counter;
   reg [32-1:0] data;
   wire[3:0] data;
   reg [0:32] data;//声明32位宽的寄存器数据变量data,最高有效位0位
   wire[9:0] data_low = data[0:9]
   //[bit+:width]:从bit位开始递增width位宽
   //[bit-:width]:从bit位开始递减width位宽
   A=data[31-:8]=data[31:24];

  • 数组
    wire [3:0]  arry_0[0:7]            //8个4bit数组成的数组
    reg  [13:0] arry_1[0:255]         //256个14bit数组成的数组
    reg  [7:0]  arry_2[0:15][0:255]  //多维数组
    //生成一个寄存单元
    reg [31:0] data_4d[11:0][3:0][3:0][255:0]
    data_4d[0][0][0][0][15:0]=15'd3;//将数组中标号为[0][0][0][0]的寄存器单元的15~0bit赋值为3
    //向量和数组不同,向量位宽为N,数组是多个元件构成,位宽为N或者为1.
    
  • 整数(integer)
    一般为默认位宽 32位,为有符号数
  • 实数(real)
    声明不带范围,默认为0;实数给整数赋值的时候,只有整数部分赋给integer类型
  • 时间(time)
  • 存储器
reg   menbit[0:255];
reg   [7:0] men[0:1023];
men[511]=8'd1;//给存储器写

  • 参数parameter
  • 字符串

模板

    module <模块名称>(
        input clk,
        input rest,
        
        端口定义);
    parameter = ;
    `define   
    reg A ; //定义寄存器变量
    wire B; //定义线网类型 

    always@(posedge clk)begin//同步时序,过程赋值语句

    end 
    always@(posedge clk or negedge rest)begin//异步时序

    end
    always@(*)begin//组合逻辑

    end 
    assign    B= ;  //连续赋值语句
    endmodule 
    //testbench
    `timescale 1ns/1ps
    module tb_<> ;
    //端口,输入reg,输出wire
    initial begin
    //初始化定义

    end 
    always # <时间> clk=~clk;
    <模块> u1 ();
    endmodule   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值