sky13笔记

1.generate用法
generate是物理上的展开,在compile时完成展开。
e.g.把array里面的每一项放入scale:

wire [7:0] array [0:7];
wire [8*8-1 :0]scale;
generate
genvar gen_x;
for(gen_x =0; gen_x <8; gen_x =gen_x +1)begin:gen_scale
	assign scale[gen_x*8 +:8] = array[gen_x];//gen_x=0,从0往上8个bit
end//有*但是不用乘法器,compile时展开8遍
endgenerate//把array的8个8bit数放入[63:0]scale

2.例子:做2个16x16矩阵的减法。(对应位相减)

wire clk, rstn;
reg [7:0] a [15:0][15:0];
reg [7:0] b [15:0][15:0];
reg [8:0] sub [15:0][15:0];//减要考虑到结果为负,加1bit作为符号位。物理上会放置256个8bit减法器

generate
genvar gen_x,gen_y;
for(gen_y =0; gen_y <16; gen_y =gen_y +1)begin :gen_sub_y//sim可以不取名,compile要取
	for(gen_x =0; gen_x <16; gen_x =gen_x +1)begin :gen_sub_x
		always @(posedge clk or negative rstn)begin
			if(!rstn)
				sub[gen_y][gen_x] <= 'd0;
			else
				sub[gen_y][gen_x] <= {1'b0, a[gen_y][gen_x]} - {1'b0,b[gen_y][gen_x]};
		end
	end
end
endgenerate

3.parameter:让IP方便配置不通应用

module myadd(a,b,sum);
parameter DWIDTH = 8;
input wire [DWIDTH-1 :0]a ,b;
output wire [DWIDTH :0] sum;
assign sum = {1'b0,a} + {1'b0,b};
endmodule

module top();
wire [8:0] a9,b9;
wire [9:0] sum10;
wire [12:0] a13,b13;
wire [13:0] sum14;

myadd #(.DWIDTH(9))u_add9b(
.a(a9),
.b(b9),
.sum(sum10));
myadd #(.DWIDTH(13))u_add13b(
.a(a13),
.b(b13),
.sum(sum14));
endmodule

4.参数化SP-SRAM模型
在这里插入图片描述
FPGA工具自动推断这是个ram,但是asic就不行,它必须要用memory compile生成,因为不知道工艺库(28nm or 40nm, tsmc台积电 or smic中芯国际)
5.为什么要定义阻塞赋值,非阻塞赋值?
硬件行为本身是并行的,而CPU是串行行为,为了用串行行为去仿真并行行为,规定了阻塞/非阻塞赋值。
可综合Verilog建议:
定义成reg的组合逻辑,用=赋值;
定义成reg的时序逻辑,用<=赋值。
详细参考
Pattern输出给DUT的信号最好不要跟clk对齐,在tb顶层故意加一个#0.1。

相关推荐

  1. sky07笔记

    2024-04-23 17:38:03       33 阅读
  2. pandas学习笔记13

    2024-04-23 17:38:03       35 阅读
  3. C语言笔记13

    2024-04-23 17:38:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 17:38:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 17:38:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 17:38:03       87 阅读
  4. Python语言-面向对象

    2024-04-23 17:38:03       96 阅读

热门阅读

  1. 管理情绪方法【你的观点“稳定”你的情绪】

    2024-04-23 17:38:03       33 阅读
  2. 富格林:戒备虚假套路保障安全

    2024-04-23 17:38:03       47 阅读
  3. C# 生成指定图片的缩略图

    2024-04-23 17:38:03       30 阅读
  4. Oracle和SQL Server区别

    2024-04-23 17:38:03       33 阅读
  5. CSS 命名规范 - BEM

    2024-04-23 17:38:03       36 阅读
  6. 【QT进阶】Qt http编程之websocket的简单介绍

    2024-04-23 17:38:03       41 阅读
  7. DBever SQL编辑器的高级应用:如何用变量快速查询

    2024-04-23 17:38:03       30 阅读