FPGA在校学习记录系列---实验7(2)使用Altera PLL锁相环生成时钟(Verilog HDL)

此系列记录FPGA在学校的学习过程。

FPGA系列
需要用到的软硬件:
软件:Quartus II 15.0 (64-bit)
在这里插入图片描述
硬件:
5CEBA4F23C7芯片

1、创建新的工程和开发板烧录在下面链接(带仿真教程)

新建工程带仿真链接:
FPGA在校学习记录系列—新建一个FPGA工程编写程序并仿真(Verilog HDL)
开发板烧录链接:
FPGA在校学习记录系列—实验4不同状态的LED+开发板(Verilog HDL)


这次创建的新工程名字为:IPcore_pll_v3

2、实验内容要求

1、调用并设置锁相环(PLL)IP核;
2、设置生成三种不同频率的clk信号;
3、生成并实现基于三种不同频率下的 32进制计数器;
4、编写测试文件,进行仿真测试。

3、创建一个新的工程,并设置Altera PLL

(1)创建新工程在文章顶部链接

这次创建的新工程名字为:IPcore_pll_v3

(2)打开IP内核并设置

FPGA在校学习记录系列—实验7(1)IP核的调用及仿真(ALTPLL)(Verilog HDL)
在上面这篇文章中已经有怎么打开IP核

1.创建Altera PLL

双击‘Altera PLL’
在这里插入图片描述

填写好路径:
在这里插入图片描述
稍等一下
在这里插入图片描述
自动弹出设置界面
在这里插入图片描述

2.设置Altera PLL

设置成50Mh与开发板匹配
在这里插入图片描述
在这里插入图片描述设置好之后点击右下角完成
在这里插入图片描述
等待一下
在这里插入图片描述电机右下角的推出
在这里插入图片描述点击yes
在这里插入图片描述

4、调用PLL

新建一个verilog文件

`timescale 1 ms/ 1 ms
module IPcore_pll_v3( 
    input      clk     ,
    input      rst_n   ,
    output     c0      ,
    output     c1      ,
    output     c2      ,
    output     locked   
);

	pll001 pll001_inst (
		.refclk   (clk),   //  refclk.clk
		.rst      (~rst_n),      //   reset.reset
		.outclk_0 (c0), // outclk0.clk
		.outclk_1 (c1), // outclk1.clk
		.outclk_2 (c2), // outclk2.clk
		.locked   (locked)    //  locked.export
	);

endmodule

在这里插入图片描述时间匹配为1ms
调用上面设置的pll001.v文件,并整理为pll001_inst

5、pll仿真

添加仿真文件教程在顶部链接

always #10 clk=~clk;
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
clk = 1;
rst_n = 1;
#40;
rst_n = 0;
#200
rst_n = 1;
#1000
$stop;                                                       
// --> end                                             
$display("Running testbench");                       
end           

仿真后结果与设置的相同
在这里插入图片描述

不同频率下的32进制计数器

(1)首先调用第一个频率

`timescale 1 ms/ 1 ms
module IPcore_pll_v3( 
    input      clk     ,
    input      rst_n   ,
    output     c0      ,
    output     c1      ,
    output     c2      ,
    output     locked  ,
	 
	 input  en1,			//使能
	 output reg [5:0] cnt1
);

reg [3:0] units1;  //个位计数缓存
reg [3:0] tens1;  //十位计数缓存

	pll001 pll001_inst (
		.refclk   (clk),   //  refclk.clk
		.rst      (~rst_n),      //   reset.reset
		.outclk_0 (c0), // outclk0.clk
		.outclk_1 (c1), // outclk1.clk
		.outclk_2 (c2), // outclk2.clk
		.locked   (locked)    //  locked.export
	);

always @(posedge c0 or negedge en1)
begin
	if(!en1)
	begin
		cnt1 = 0;
		units1 = cnt1 % 10;
		tens1 = ((cnt1-units1)/10)%10;
	end 
	else 
	begin
		cnt1 <=(cnt1 == 31)?0:(cnt1 + 1);	
		units1 = cnt1 % 10;
		tens1 = ((cnt1-units1)/10)%10;
	end
end	

endmodule

仿真要将时间改成ms

always #10 clk=~clk;
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
clk = 1;
en1= 0;
rst_n = 1;
#40
rst_n = 0;
#200
rst_n = 1;
#50
en1=1;                                                      
// --> end                                             
$display("Running testbench");                       
end                                                    

在这里插入图片描述可以看见32位计数器验证成功

(2)三个频率下的32位计数器

`timescale 1 ms/ 1 ms
module IPcore_pll_v3( 
    input      clk     ,
    input      rst_n   ,
    output     c0      ,
    output     c1      ,
    output     c2      ,
    output     locked  ,
	 
	 input  en1,			//使能
	 output reg [5:0] cnt1,
	 
	 input  en2,			//使能
	 output reg [5:0] cnt2,
	 
	 input  en3,			//使能
	 output reg [5:0] cnt3
);

reg [3:0] units1;  //个位计数缓存
reg [3:0] tens1;  //十位计数缓存

reg [3:0] units2;  //个位计数缓存
reg [3:0] tens2;  //十位计数缓存

reg [3:0] units3;  //个位计数缓存
reg [3:0] tens3;  //十位计数缓存

	pll001 pll001_inst (
		.refclk   (clk),   //  refclk.clk
		.rst      (~rst_n),      //   reset.reset
		.outclk_0 (c0), // outclk0.clk
		.outclk_1 (c1), // outclk1.clk
		.outclk_2 (c2), // outclk2.clk
		.locked   (locked)    //  locked.export
	);

always @(posedge c0 or negedge en1)
begin
	if(!en1)
	begin
		cnt1 = 0;
		units1 = cnt1 % 10;
		tens1 = ((cnt1-units1)/10)%10;
	end 
	else 
	begin
		cnt1 <=(cnt1 == 31)?0:(cnt1 + 1);	
		units1 = cnt1 % 10;
		tens1 = ((cnt1-units1)/10)%10;
	end
end	

always @(posedge c1 or negedge en2)
begin
	if(!en2)
	begin
		cnt2 = 0;
		units2 = cnt2 % 10;
		tens2 = ((cnt2-units2)/10)%10;
	end 
	else 
	begin
		cnt2 <=(cnt2 == 31)?0:(cnt2 + 1);	
		units2 = cnt2 % 10;
		tens2 = ((cnt2-units2)/10)%10;
	end
end	

always @(posedge c2 or negedge en3)
begin
	if(!en3)
	begin
		cnt3 = 0;
		units3 = cnt3 % 10;
		tens3 = ((cnt3-units3)/10)%10;
	end 
	else 
	begin
		cnt3 <=(cnt3 == 31)?0:(cnt3 + 1);	
		units3 = cnt3 % 10;
		tens3 = ((cnt3-units3)/10)%10;
	end
end	

endmodule

仿真(时间改成ms)

always #10 clk=~clk;
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
clk = 1;
en1= 0;
en2= 0;
en3= 0;
rst_n = 1;
#40
rst_n = 0;
#200
rst_n = 1;
#50
en1=1; 
en2=1; 
en3=1;                                                      
// --> end                                            
$display("Running testbench");                       
end                                                    

在这里插入图片描述在这里插入图片描述在这里插入图片描述

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识点解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值