国产安路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在配置过程中遇到的问题总结
四、下载完成
最终芯片选择完成,下载成功,功能正常。