CPU设计实战(一)

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


第二章 硬件实验平台及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,写入数据。
在这里插入图片描述
如果访问没有加载过的位置,会显示X(高阻态)
在这里插入图片描述
访问存过的位置,会显示写入的数据大小
在这里插入图片描述

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

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

在这里插入图片描述
依次在地址16’hf0 f1 f2 f3 f3 中写入数据。
在这里插入图片描述
从地址16’hf0 f1 f2 f3 f3 中读取数据。
在这里插入图片描述

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

在这里插入图片描述
依次在地址16’hf0 f1 f2 f3 f3 中写入数据。
在这里插入图片描述

从图片可见,板载RAM载读取数据时候,读出数据默认在读地址的后一个时钟周期内出现。
在这里插入图片描述
使用提供的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的上一个时钟沿的数值在这里插入图片描述
(2)将num_scn改为num_csn
在这里插入图片描述
(3)将缺少的6补上去
在这里插入图片描述

(4)更改keep_a_g
在这里插入图片描述
(4)更改=为<=
在这里插入图片描述

(6)修改后的时序图如下所示
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jun_luo_yu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值