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 //parameter 标识符 = (位宽)常数;//位宽默认为32位,如果指定位宽则以指定值为准
2 parameter NUM = 4'd8;
3 reg[8-1:0] dout;
4 dout <= {NUM{1'b1}}; //等价于 dout <= {8’hff};
1 /***************************************************************************************/
2 data[24-:8] <= din[24-:8]; //等价于data[24:17] <= din[24:17]; //第24位往后取8位
3
4 dout = din[(cnt+1)*4-1-:4]; //当cnt = 0时,dout = din[3:0] ; //往后取4位
5 /***************************************************************************************/
1 /*************************************************************/
2 //位拼接注意一定要加上位宽
3 data = {1'b1,4'd3,2'b11,1'b0}; //位拼接必须带上位宽,否则,被拼接的数会被默认为是32位宽
4 /*************************************************************/