• 一些基本常用的仿真语句,写的不多,大部分都是拷贝方式比多,所以有时还比较纠结


    1 /***********************************************************************************************************************************/
    2 
    3 //for循环
    4 integer i;
    5 for(i=0; i<8; i= i+1)begin
    6     data = i;
    7 end
    8 
    9 /***********************************************************************************************************************************/
    1 /***********************************************************************************************************************************/
    2 
    3 //随机数
    4 data = $random;                 //产生随机数,产生的随机会根据信号data的位宽自动确认范围
    5 data = $urandom_range(min,max); //生成min到max范围内的随机无符号整数 
    6 data = $random % 10;            //产生10以内的随机数
    7 
    8 /***********************************************************************************************************************************/
    1 /***********************************************************************************************************************************/
    2 
    3 //避免在综合时被优化,添加特殊注释语句“/* synthesis keep*/”,注意这个特殊语句只对wire类型有效
    4 
    5 wire dout_vld/* synthesis keep = 1*/;  //添加synthesis keep后,dout_vld就不会被SignalTab给优化
    6 
    7 reg[7:0] data_in/* synthesis preserve = 1 */; 
    8 
    9 /***********************************************************************************************************************************/
    1 /***********************************************************************************************************************************/
    2 
    3 //强制赋值操作,最后必须释放,需配对操作
    4 force u1_inist.xx = 8'haa;    //强制赋值
    5 release u1_inist.xx;        //释放
    6 
    7 /***********************************************************************************************************************************/
    1 /***********************************************************************************************************************************/
    2 
    3 //时间精度
    4 `timesclae 1ns/1ns            //注意格式,没有结束分号, 单位和精度之间是用的 反斜杠 
    5 
    6 /***********************************************************************************************************************************/
     1 /**************************************************/
     2 //建议还是加begin end ,后面写就不容易出错
     3 initial begin
     4         clk = 0;
     5         forever begin            
     6             #(CLK_CYCLE/2);
     7             clk = ~clk;
     8         end
     9 end
    10 /**************************************************/
    11 //不加begin end ,在(CLK_CYCLE/2)这个地方不能加分号,
    12 //因大部分都是拷贝比多,时间长了忘记细节了,就有时考虑要不要加分号了,很痛苦
    13 initial begin
    14         clk = 0;
    15         forever #(CLK_CYCLE/2) clk = ~clk;
    16 end
    17 /**************************************************/
     1 /**************************************************/
     2 initial begin
     3     #1;            //先加一个延迟,保证建立时间,避免出现竞争
     4     din_vld = 0;
     5     din = 0;
     6     for(i=0; i<128; i=i+1)begin
     7         din_vld = 0;
     8         #(CLK_CYCLE*10);
     9         din_vld = 1;
    10         din = $urandom_range(48, 103);
    11         #(CLK_CYCLE);
    12         din_vld = 0;
    13     end
    14 end
    15 /**************************************************/
    1 /*************************************************************/
    2 parameter NUM = 4'd8;
    3 data <= {NUM{1'b1}}; // 等价于data <= 8'b1111_1111;
    4 /*************************************************************/
    1 /*************************************************************/
    2 data[24-:8] <= din[24-:8]; //等价于data[24:17] <= din[24:17]; 
    3 //第24位往下数8个
    4 /*************************************************************/
    1 /*************************************************************/
    2 //位拼接注意一定要加上位宽
    3 data = {1'b1,4'd3,2'b11,1'b0}; //位拼接必须带上位宽,否则,被拼接的数会被默认为是32位宽
    4 /*************************************************************/
  • 相关阅读:
    Outlook 2003 最小化到系统托盘方法 [转]
    Sql Server 得到当月第一天
    禁止用户对系统数据库表的SELECT权限
    解决IE二级链接无法打开故障
    服务器安全设置全攻略
    使用TSQL脚本在SQL Server创建角色,并给角色赋予相应权限
    Redis内部阻塞式操作有哪些?
    UML和OO
    PetShop 4 详解(转载)
    Blog开通了
  • 原文地址:https://www.cnblogs.com/wen2376/p/16293527.html
Copyright © 2020-2023  润新知