第二章、第三章 任务与实践


文章目录

  • 第二章、第三章 任务与实践
  • 第二章 硬件实验平台及FPGA设计流程
  • 1.跑马灯
  • 第三章 数字逻辑电路设计基础
  • 1.寄存器堆仿真
  • 2.板载RAM以及分布式RAM的仿真
  • (1)首先是查找表搭建的RAM仿真,如下图所示,we表示写使能信号,a为写地址,d为写数据,spo为读数据。
  • (2)其次是板载的RAM仿真,如下图所示,wea表示写使能,addra表示地址,dina表示写入数据,douta表示读取数据。
  • 3.数字逻辑电路的设计与调试



第二章 硬件实验平台及FPGA设计流程

我的手上只有ZCU106板卡,并没有对应的龙芯平台的板子。

1.跑马灯

组合逻辑的点灯,对于每一个灯,由Switch开关来控制。
led.v

module led(
	input  [7:0] switch,
	output [7:0] led
};
	assign led = switch;
endmodule

led_tb.v

module led_tb( );
	reg [7:0] switch;
	wire [7:0] led;
	led led_inst(
		.switch(switch),
		.led(led)
		);
	initial begin
		switch = 8'b0;
		#100;
		$stop;
	end
	always #10 begin
		switch = {$random} % 256;
	end
endmodule

led.xdc

set_property PACKAGE_PIN AL11 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS12 [get_ports {led[0]} ]
set_property PACKAGE_PIN AL13 [get_ports {led[1]}] 
set_property IOSTANDARD LVCMOS12 [get_ports {led[1]} ]
set_property PACKAGE_PIN AK13 [get_ports {led[2]}] 
set_property IOSTANDARD LVCMOS12 [get_ports {led[2]} ]
set_property PACKAGE_PIN AE15 [get_ports {led[3]}] 
set_property IOSTANDARD LVCMOS12 [get_ports {led[3]} ]
set_property PACKAGE_PIN AM8 [get_ports {led[4]}] 
set_property IOSTANDARD LVCMOS12 [get_ports {led[4]} ]
set_property PACKAGE_PIN AM9 [get_ports {led[5]}] 
set_property IOSTANDARD LVCMOS12 [get_ports {led[5]} ]
set_property PACKAGE_PIN AM10 [get_ports {led[6]}] 
set_property IOSTANDARD LVCMOS12 [get_ports {led[6]} ]
set_property PACKAGE_PIN AM11 [get_ports {led[7]}] 
set_property IOSTANDARD LVCMOS12 [get_ports {led[7]} ]

set_property PACKAGE_PIN A17 [get_ports {switch[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports {switch[0]}]
set_property PACKAGE_PIN A16 [get_ports {switch[1]}]
set_property IOSTANDARD LVCMOS18 [get_ports {switch[1]}]
set_property PACKAGE_PIN B16 [get_ports {switch[2]}]
set_property IOSTANDARD LVCMOS18 [get_ports {switch[2]}]
set_property PACKAGE_PIN B15 [get_ports {switch[3]}]
set_property IOSTANDARD LVCMOS18 [get_ports {switch[3]}]
set_property PACKAGE_PIN A15 [get_ports {switch[4]}]
set_property IOSTANDARD LVCMOS18 [get_ports {switch[4]}]
set_property PACKAGE_PIN A14 [get_ports {switch[5]}]
set_property IOSTANDARD LVCMOS18 [get_ports {switch[5]}]
set_property PACKAGE_PIN B14 [get_ports {switch[6]}]
set_property IOSTANDARD LVCMOS18 [get_ports {switch[6]}]
set_property PACKAGE_PIN B13 [get_ports {switch[7]}]
set_property IOSTANDARD LVCMOS18 [get_ports {switch[7]}]

第三章 数字逻辑电路设计基础

1.寄存器堆仿真

在第2011ns时候,由于we = 1’b0,所以不写入数据,在10ns之后we=1,写入数据。

cputem_cputem


如果访问没有加载过的位置,会显示X(高阻态)

cputem_数据_02


访问存过的位置,会显示写入的数据大小

cputem_写数据_03

2.板载RAM以及分布式RAM的仿真

(1)首先是查找表搭建的RAM仿真,如下图所示,we表示写使能信号,a为写地址,d为写数据,spo为读数据。

cputem_数据_04


依次在地址16’hf0 f1 f2 f3 f3 中写入数据。

cputem_fpga_05


从地址16’hf0 f1 f2 f3 f3 中读取数据。

cputem_写数据_06

(2)其次是板载的RAM仿真,如下图所示,wea表示写使能,addra表示地址,dina表示写入数据,douta表示读取数据。

cputem_cputem_07


依次在地址16’hf0 f1 f2 f3 f3 中写入数据。

cputem_写数据_08

从图片可见,板载RAM载读取数据时候,读出数据默认在读地址的后一个时钟周期内出现。

cputem_读取数据_09


使用提供的XDC文件,先建立50MHz的时钟,再加上输入输出的delay,然后进行综合与实现过程,观察时序报告以及对应的资源报告。

create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk]
set_input_delay -clock clk [expr 4.0] [all_inputs]
set_output_delay -clock clk [expr 3.0] [all_outputs]

用资源堆出来的RAM在写数据与读数据时候,都是与地址同步的;
但是板载的RAM在写数据时候同步,读数据时候晚于地址一个时钟周期。

3.数字逻辑电路的设计与调试

(1)删去show_data_r前面的注释#,这样每次都会保存show_data的上一个时钟沿的数值

cputem_写数据_10


(2)将num_scn改为num_csn

cputem_写数据_11


(3)将缺少的6补上去

cputem_数据_12

(4)更改keep_a_g

cputem_cputem_13


(4)更改=为<=

cputem_数据_14

(6)修改后的时序图如下所示

cputem_数据_15