FPGA开发笔记--HelloWorld
文章摘要:
近日花巨资从某宝购置了一个套FPGA开发板,拿到板子的第一件事肯定是先跑上大名鼎鼎的跑马灯例程,应当算是硬件开发中的HelloWorld了,本文中要从新建工程到仿真下载验证,来说明FPGA的开发流程,本文的代码不重要,重点在于流程,流程,流程...
硬件平台: EP4CE6F17C8
开发环境: Quartus II 13.1
第一步:新建工程
File --> Open Project Wizard...
1.选择工程目录,指定工程名及设计入口,一般情况下建议工程目录,工程名称及设计入口同名,不能有中文路径;
2.添加已有文件,如果新建的工程,则直接跳过;
3.器件选择,需要与实际用到的器件相同,这里选择EP4CE6F17C8;
4.设置工具,一般直接跳过;
5.信息确认,如果无误则点击Finish完成;
修改默认配置:
Assignments --> Device...
--> Device and Pin Option...
Unused Pins:未用到引脚选择,As input tri-stated;
Valtage 引脚默认电压值,选择 3.3-V LVTTL;
第二步:建立HDL文件
File--> New...
Design Files --> Verilog HDL File
示例代码:
/*
* 功能描述:流水灯演示
*/
module led_test (
input clk, // 时钟输入(外部50MHz晶振)
input rst_n, // 复位按键
output reg [3:0] led // 4位LED
);
// 寄存器定义
reg [31:0] timer; // 用于定时器计数
// 计时时钟
always @(posedge clk or negedge rst_n)
begin
if(~rst_n)
timer <= 0;
else if(timer == 32'd200_000_000)
timer <= 0;
else
timer <= timer + 1'b1; // 通过脉冲数计算时间
end
// 检测时钟的下降沿和复位的下降沿
always @(posedge clk or negedge rst_n)
begin
if (~rst_n) // 复位信号低电平有效
led <= 4'b0000; // LED灯输出全为低,四个LED灯灭
// 时钟下降沿
else
begin
// 50HMz的时钟下,50个时钟为1us
if(timer == 32'd50_000_000)
led <= 4'b0001;
else if (timer == 32'd100_000_000)
led <= 4'b0010;
else if (timer == 32'd150_000_000)
led <= 4'b0100;
else if (timer == 32'd200_000_000)
led <= 4'b1000;
end
end
endmodule
保存文件,名称与之前设置的入口文件相同;
第三步:综合
点击Analysis & Synthesis进行综合;
第四步:引脚分配
Assignments --> Pins Planner打开引脚分配页面进行分配;
按照原理图上分配对应的引脚:
CLK --> E1
LED0 --> E10
LED1 --> F9
LED2 --> C9
LED3 --> D9
I/O Standard 根据实际电路选择电平标准,这里选择3.3-V LVTTL;
同一个Bank的引脚的电平标准必须相同;
注意事项:
必须综合之后,才能进行引脚分配,否则系统并不知道你用了哪些引脚;
第五步:编译
点击Complile Design进行全编译;
第六步:下载测试
通过JTAG下载至RAM
点击Program Device打开编译器;
点击Add File...添加output_files目录下生成的sof文件;
点击Start即可进行下载;
下载完成后会自动运行,掉电后会丢失;
固化至配置芯片
文件转换:
File --> Convert Programming Files...
Programming file type:
选择文件格式,指定为jic格式,JTAG Indirect Configuration File(.jic)
Configuration device:
选择配置芯片型号,与目标板上的型号一致(EPCS16)
Flash Loader:与目标板上FPGA的类别一致;
Sof Data:选择编译好的sof文件;
点击Generate生成jic目标文件;
(此时可选择Save Conversion Setup... 保本配置参数,以便下次调入)
下载固化:
点击Program Device打开编译器;
点击Add File...添加output_files目录下生成的jic文件;
点击Start即可进行下载;
下载完成后,不会自动运行,需要重上电才能正常运行;
注意事项:
一般只有在完成调试完成后,交付测试时才需要固化,而在调试过程中,则没必要进行固化下载;
NTP服务器移植及应用
测试平台:S3C2410
内核版本:linux-3.10.1
1.下载源码
http://www.ntp.org/
2.配置及编译
$ ./configure --host=arm-linux --prefix=/opt/rootfs/
$ make
$ make install
部署说明:
1.复制生成的文件至开发板对应的目录;
2.对于生成的二进制文件最好先用strip命令优化一下,以提高运行速度和节省空间;
NTP时间服务器设置:
建立配置文件/etc/ntp.conf
# restrict 命令用于权限设定
# 格式:restrict {IP} [mask netmask] [parameter]
# ignore: 拒绝该地址的所有的NTP服务;
# nomodify: 客户端可通过服务器来授时,但不能使用 ntpc和ntpq这两个命令来修改服务器的时间参数;
# noquery: 不对该客户端提供授时服务;
# notrap: 不提供 trap 远端事件登陆 (remote event logging) 的服务;
# notrust: 拒绝没有认证的客户端;
# 没有参数项,表示不受任何限制;
# 权限设定,本机地址不受任何限制
restrict 127.0.0.1
# 允许192.168.0.0 网段的所有主机对时
restrict 192.168.0.0 mask 255.255.255.0 nomodify
# 允许192.168.100.20这台主机对时
restrict 192.168.100.20 mask 255.255.255.255 nomodify
# server 用于指定上层的时间服务器
# 格式:server {IP} [ prefer ]
# prefer表示优先使用的服务器
server 210.72.145.44
server time.nist.gov
server time.stdtime.gov.tw
# 对上层服务器开放所有权限
restrict 210.72.145.44
restrict time.nist.gov
restrict time.stdtime.gov.tw
# 指定自动更新时间(单位为分钟)
# fudge胡说八道??
fudge time.nist.gov stratum 60
配置完成,启动ntpd.
如果运行时出现错误:
Error resolving 210.72.145.44: Servname not supported for ai_socktype (-8) 1 Jan 02:58:36
ntpdate[1148]: Can't find host 210.72.145.44: Servname not supported for ai_socktype (-8) 1 Jan 02:58:36
ntpdate[1148]: no servers can be used, exiting
原因是未指定ntp端口号,修改/etc/services文件,添加以下两行
ntp 123/tcp
ntp 123/udp
客户端手动更新本地时间:
# ntpdata 210.72.145.44
将系统时间写入BIOS
# hwclock -w
几个常用的时间服务器:
time.nist.gov 美国国家标准与技术研究院
210.72.145.44 中国科学院国家授时中心
服务器搭建--基于arm-linux的web服务器搭建
文章摘要:
本文描述了基于arm-linux平台的web服务器搭建(nginx + php);
硬件平台: s3c2410
内核版本: linux-3.10.1
编译器版本:arm-linux-gcc v4.4.3
nginx服务器搭建
软件版本:nginx-0.6.39/pcre-8.35
1.下载PCRE源码并解压至/usr/src
pcre主要是为了使nginx支持rewrite属性,主要用于php;
2.下载nginx源码,并解压至/usr/src
$./configure --prefix=/usr/local/nginx -conf-path=/etc/nginx/nginx.conf --with-pcre=../pcre-8.34/
注意事项:
--conf-path=/etc/nginx/nginx.conf 用来指明运行配置文件的位置
3.修改objs/Makefile
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
由于nginx不支持--host选项,所以需要手动更改编译器;
4.配置pcre
$ cd ../pcre-8.35
$ ./configure --disable-shared --host=arm-linux
注意事项:
这一步不能提前,只能在修改Makefile后进行,否则Makefile会丢失;
--host指定主机类型后,会自动生成arm-linux-gcc的编译命令;
5.编译
$cd ../nginx-0.6.39
$make
编译好的nginx文件位于objs目录中;
6.部署安装
将nginx文件复制到开发板的/usr/sbin目录中;
将conf目录的所有文件复制到开发板的/etc/nginx目录;
7.运行
# /usr/sbin/nginx
至此可以浏览器访问通过访问静态html页面;
注意事项:
nginx-0.7.69及以上版本,需要md5支持;
php环境搭建
软件版本:php-5.6.27
1.下载php源码
http://www.php.net/downloads.php
2.编译安装
$CC=arm-linux-gcc
$./configure --host=arm-linux --prefix=/opt/php5 --disable-all --enable-fpm --enable-pdo --with-zlib --without-iconv
$make
$make install
选项说明:
使能fpm模块(重要): --enable-fpm
嵌入式一般不采用mysql数据库,而是采用sqlite数据库:
--with-sqlite3
--with-sqlite
--with-pdo-sqlite
php-fpm.conf
将etc/php-fpm.conf.default文件复制至目标板/etc/php5/fpm/php-fpm.conf
修改php-fpm.conf,指定pid(重要)
pid = /var/run/php5-fpm.pid
如果目标板没有/var/run和/var/log目录的话,则建立该目录;
3.运行php-fpm
# /usr/local/php5/sbin/php-fpm -y /etc/php-fpm.conf
nginx配置示例:
server {
listen 80;
server_name 192.168.9.166;
location / {
root /var/www/html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
fastcgi_params文件说明:
主要声明了相关的变量
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
在网站根目录建立index.php文件:
<?php
phpinfo();
?>
重启nginx,即可通过浏览器访问php页面;
相关下载:
http://www.pcre.org/
http://nginx.org/en/download.html
ftp://ftp.penguin.cz/pub/users/mhi/libmd/libmd-0.3.tar.bz2
http://www.php.net/downloads.php
Typecho应用笔记
函数及变量说明:
站点名称:$this->options->title();
域名地址:$this->options->siteUrl();
后台地址:$this->options->adminUrl();
作者名称:$this->author();
作者邮箱:$this->author->mail();
文件标题:$this->title();
发表时间:$this->date();
模版文件夹地址:$this->options->themeUrl();
阅读全文的链接:$this->permalink;
上一篇: $this->thePrev('%s','没有了');
下一篇: $this->theNext('%s','没有了');
显示全部内容:$this->content();
显示摘要:$this->content('- 阅读全文 -');
显示前N个字节:
$this->excerpt(240, '...<p class="more"><a href="'.$this->permalink.'">- 阅读全文 -</a></p>');
显示内容的前240个字符,并将后边的字符串附加在后边;
参考内容:
http://yijile.com/log/185.html
http://docs.typecho.org/themes/quick-tutorial
修改文件上传路径:
/var/Widget/Upload.php
根目录:const UPLOAD_DIR = '/usr/uploads';
文件名称及路径:共有两处;
插件说明
插件位于usr/plugins/目录中;
代码高亮 GoogleCodePrettify
src目录保存了样式表,每个配置文件一种样式;
github.css
代码间距:
ol.linenums的line-height属性
line-height:1.2em
行号显示:
ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE }
li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none;line-height:1.2em}
list-style-type属性
默认值为:
decimal 显示数字
none 不显示行号
其他值请参考list-style-type的取值;
注意事项:
因为里边没有L4和L9,所以每逢遇到L4或L9的地方,就会显示行号,
如果需要全部都不显示行号,将L4和L9添加进去就可以了;