国产安路FPGA(一)-TD软件使用及问题记录

国产安路FPGA(一)-TD软件使用及问题记录

一、概述

本次博客为系列博客,仅是为了记录再使用国产安路各种芯片和软件使用工具上的问题以及解决方式。
TD软件所使用的版本为TD5.0.5_SP1-64bit
本次使用的是安路官方板卡,型号为EG4S20BG256_MINI_DEV,芯片型号为EG4S20BG256,板载25MHZ的时钟晶振。根据官方所给出的文档,可以看出EG4S20BG256的逻辑资源以及对应封装的尺寸和引脚,为后续PCB硬件部分的设置可以提供参考。
在这里插入图片描述

二、工程代码及描述

代码部分:
实验一,主要制作了流水灯,并以数码管、按键以及拨码开关的控制方式分别控制流水灯和数码管的运行方向和速度。

module Flow_LED(sys_clk,sys_rstn,key,sw,sm_seg,sm_bit,led);
	
	//input
	input sys_clk,sys_rstn;
	input [1:0]key;
	input [3:0]sw;
	//output
	output reg [7:0]sm_seg;
	output reg [1:0]sm_bit;
	output [7:0]led;
	
	// alterable frequency divider
	reg [25:0]cnt;
	reg cnt_clk;
	reg [25:0]count;
	always @(posedge sys_clk or negedge sys_rstn)
		begin
			if(!sys_rstn)
				count<=15_000_000;
			else
				case(sw)
					4'b0000:count<=1_000_000;
					4'b1100,4'b0011:count<=5_000_000;
					4'b1111:count<=10_000_000;
				endcase
		end
	always @(posedge sys_clk or negedge sys_rstn)
		begin
			if(!sys_rstn)
				begin
					cnt<=0;
					cnt_clk<=0;
				end
			else if(cnt>count)
				begin
					cnt<=0;
					cnt_clk<=~cnt_clk;
				end
				else
					cnt<=cnt+1'b1;
		end
	
	//key scan
	reg [1:0]key_1,key_2;
	reg sign;
	always @(posedge cnt[10] or negedge sys_rstn)
		begin
			if(!sys_rstn)
				begin
					key_1<=0;
					key_2<=0;
					sign<=0;
				end
			else
				begin
					key_1<=key;
					key_2<=key_1;
					if(key_1==key_2)
						if(key_1==2'b10)
							sign<=0;
						else if(key_1==2'b01)
							sign<=1'b1;
				end
		end
	
	//get data for seg
	reg [7:0]data;
	always @(posedge cnt_clk or negedge sys_rstn)
		begin
			if(!sys_rstn)
				begin
					data<=0;
				end
			else
				case(sign)
					0:data<=data+1'b1;
					1:data<=data-1'b1;
				endcase
		end
	//seg show
	reg [3:0]disp_data;
	always @(posedge sys_clk or negedge sys_rstn)
		begin
			if(!sys_rstn)
				sm_seg<=0;
			else
				case(disp_data)
					4'h0 : sm_seg <= 8'hc0;   // "0"
					4'h1 : sm_seg <= 8'hf9;   // "1"
					4'h2 : sm_seg <= 8'ha4;   // "2"
					4'h3 : sm_seg <= 8'hb0;   // "3"
					4'h4 : sm_seg <= 8'h99;   // "4"
					4'h5 : sm_seg <= 8'h92;   // "5"
					4'h6 : sm_seg <= 8'h82;   // "6"
					4'h7 : sm_seg <= 8'hf8;   // "7"
					4'h8 : sm_seg <= 8'h80;   // "8"
					4'h9 : sm_seg <= 8'h90;   // "9"
					4'ha : sm_seg <= 8'h88;   // "a"
					4'hb : sm_seg <= 8'h83;   // "b"
					4'hc : sm_seg <= 8'hc6;   // "c"
					4'hd : sm_seg <= 8'ha1;   // "d"
					4'he : sm_seg <= 8'h86;   // "e"
					4'hf : sm_seg <= 8'h8e;   // "f"
				endcase
		end
	reg num;
	always @(posedge cnt[15] or negedge sys_rstn)
		begin
			if(!sys_rstn)
				num<=0;
			else 
				num<=~num;
		end
	always @(posedge sys_clk or negedge sys_rstn)
		begin
			if(!sys_rstn)
				begin
					sm_bit<=2'b11;
					disp_data<=0;
				end
			else
				begin
					sm_bit<=2'b00;
					sm_bit[num]<=1'b1;
					case(num)
						0:disp_data<=data[7:4];
						1:disp_data<=data[3:0];
					endcase
				end
		end
	//led flow
	reg [7:0]led_reg;
	always @ (posedge cnt_clk or negedge sys_rstn)
		begin
			if(!sys_rstn)
				led_reg<=8'b1111_1110;
			else
				case(sign)
					1:led_reg<={led_reg[6:0],led_reg[7]};
					0:led_reg<={led_reg[0],led_reg[7:1]};
				endcase
		end
        
	assign led=led_reg;
    
endmodule

安路TD部分的约束主要分为物理约束(IO引脚约束,ADC文件)和时序约束文件(SDC文件)。
ADC引脚约束文件如下:

set_pin_assignment {sys_clk}    { LOCATION = P1;  }
set_pin_assignment {sys_rstn}  { LOCATION = P4;  } ##KEY4

set_pin_assignment {sw[0]} { LOCATION = C4; } ##SW1
set_pin_assignment {sw[1]} { LOCATION = M7; } ##SW2
set_pin_assignment {sw[2]} { LOCATION = P7; } ##SW3
set_pin_assignment {sw[3]} { LOCATION = P6; } ##SW4

set_pin_assignment {key[0]} { LOCATION = N5; } ##KEY1
set_pin_assignment {key[1]} { LOCATION = P5; } ##KEY2
##set_pin_assignment {key[2]} { LOCATION = T4; } ##KEY3
##set_pin_assignment {button_i[3]} { LOCATION = P4; } ##KEY4

set_pin_assignment {led[0]} { LOCATION = T9;  }
set_pin_assignment {led[1]} { LOCATION = R9;  }
set_pin_assignment {led[2]} { LOCATION = T8;  }
set_pin_assignment {led[3]} { LOCATION = T7;  }
set_pin_assignment {led[4]} { LOCATION = R7;  }
set_pin_assignment {led[5]} { LOCATION = P8;  }
set_pin_assignment {led[6]} { LOCATION = P9;  }
set_pin_assignment {led[7]} { LOCATION = N9;  }

set_pin_assignment {sm_seg[0]} { LOCATION = A13; }#a
set_pin_assignment {sm_seg[1]} { LOCATION = A14; }#b
set_pin_assignment {sm_seg[2]} { LOCATION = B6;  }#c
set_pin_assignment {sm_seg[3]} { LOCATION = A6;  }#d
set_pin_assignment {sm_seg[4]} { LOCATION = A7;  }#e
set_pin_assignment {sm_seg[5]} { LOCATION = B12; }#f
set_pin_assignment {sm_seg[6]} { LOCATION = A12; }#g 
set_pin_assignment {sm_seg[7]} { LOCATION = A5;  }#p

set_pin_assignment {sm_bit[0]}   { LOCATION = B14; }
set_pin_assignment {sm_bit[1]}   { LOCATION = C13; }

SDC时序约束文件如下:

create_clock -name sys_clk -period 25 -waveform {0 12.5} [get_ports {sys_clk}]

三、TD软件下载遇到问题及解决方式

TD软件生成BIT文件后,既可以进行下载,通过JTAG部分进行下载,但在操作过程中遇到两个问题:
1. TD软件的USB CABLE驱动需要手动安装;
2. 安装完驱动并且已经更新至最新驱动时,驱动部分仍然显示“黄色感叹号”;
问题解决:
1. 驱动手动安装,可以在电脑的设备管理器中右击添加驱动(这里我进行过实验,无论是只选择Driver还是选择Driver下的X64位的都可以使用)
在这里插入图片描述
2. 更新过后仍然具有感叹号,且下载时找不到芯片型号。这个查阅了很久是因为PC端的设置问题,即驱动强制数字签名。因此需要禁用驱动程序强制签名。步骤如下:
(1)打开windows设置——更新与安全——恢复——高级启动,在高级启动中点击立即重新启动;
(2)电脑重启后会进入到蓝色选择页面,选择疑难解答——高级选项——启动设置——重启,然后按提示键7禁用驱动程序强制签名;

这是因为通过这篇博客而解决的,有兴趣的同学可以去看看安路SparkRoad开发板EG4S20BG256在配置过程中遇到的问题总结

四、下载完成

最终芯片选择完成,下载成功,功能正常。
在这里插入图片描述

  • 9
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值