1.OSC(内部振荡器)
按照Project->New Project顺序新建工程后,后按照Tools->IP Generator顺序,创建IP核,如下图:
安路FPGA的内置OSC振荡模块频率可选30MHz、60MHz。
可选Verilog或VHDL语言。
如图,生成的.v文件只读,如需进一步的修改,可将文件另存,然后将新文件更新到工程里即可。
osc_clk为输出频率,osc_dis为使能输入,低电平有效,参数"60"为配置频率,单位为MHz。为测试效果,可进行分频后输出,如下:
module OSC_Test( clk_out ); //
output reg clk_out;
//input osc_dis;
wire osc_clk;
reg[24:0]count;
ELF_PHY_OSC #( //例化,配置为60MHz输出
.FREQ("60"))
osc_inst(
.osc_clk(osc_clk), //频率输出
.osc_dis(1'b0)); //使能,低电平有效
always@(posedge osc_clk) //60M分频成1Hz
if (count>=30000000-1)
begin clk_out<=~clk_out; count<=0; end
else
count<=count+1;
endmodule
需要注意的是,程序重新Download后,FPGA功能有可能没有随即更新,可关闭电源重新上电再行操作。
2.UART(串口通信)
依据安路官方资料,其uart基本结构如下:
IP核配置选择如下:
以EF1A650LG144为例,24MHz时钟,波特率115200bps。
新建一顶层文件:
module uart_top
(
clk, //24M
rst_n, //低电平复位
rxd, //rxd
txd //txd
);
input clk;
input rst_n;
input rxd;
output txd;
wire tx_en; //发送使能,高电平有效
wire rx_err; //接收错误,高电平有效
wire rx_vld; //接收有效,高电平有效
wire tx_rdy; //高电平准备好,可以发送;低电平发送忙
wire [7:0] tx_data; //8位发送
wire [7:0] rx_data; //8位接收
UART u0(
.clk(clk),
.rst_n(rst_n),
.rxd(rxd),
.tx_data(tx_data),
.tx_en(tx_en),
.rx_data(rx_data),
.rx_err(rx_err),
.rx_vld(rx_vld),
.tx_rdy(tx_rdy),
.txd(txd)
);
assign tx_en=rx_vld&tx_rdy&(!rx_err);
assign tx_data=rx_data+1'b1;
endmodule
以上程序的作用是收到一个ACII码后,加1后回送,效果如下:
引脚约束:
set_pin_assignment { clk } { LOCATION = P20; }
set_pin_assignment { txd } { LOCATION = P143; }
set_pin_assignment { rxd } { LOCATION = P144; }
set_pin_assignment { rst_n } { LOCATION = P120; }
3.对于硬木课堂出品的EG4S20开发板来说,如下图,其时钟为50M,rxd、txd引脚分别为F12、D12。
IP核配置如下:
引脚配置如下:
set_pin_assignment { clk } { LOCATION = R7; }
set_pin_assignment { rst_n } { LOCATION = A14; }
set_pin_assignment { rxd } { LOCATION = F12; }
set_pin_assignment { txd } { LOCATION = D12; }