module ZephRay;

今朝有鱼今朝摸

Category

  • 摄影
  • 玩机
  • 硬件坑
  • 翻译
  • 软件坑
  • 随记

Tags

  • LCD
  • 点屏
  • 单片机
  • 计算器
  • 事
  • FPGA
  • 摄影
  • STM32
  • 古董
  • 测评
  • Verilog
  • 笔记本
  • 改造
  • ARM
  • 移植
  • Linux
  • 树莓派
  • nspire
  • 教程
  • 小动物
  • LED
  • 项目
  • EPD
  • GameBoy
  • 景
  • IBM
  • HP
  • SDL
  • ThinkPad
  • 3DS
  • 晒机
  • Minecraft
  • Kindle
  • 82ES
  • 花
  • Assembly
  • 手办
  • Chiptune
  • 仙剑奇侠传
  • 演讲
  • NDSL
  • 贴图
  • Nikon

Recent replies

  • 城市猎人 发表于「IBM ThinkPad 560E (Type 2640) 简单展示」
  • Khiemmy 发表于「On the way to overclock the TI nspire CX II calculator」
  • critor 发表于「On the way to overclock the TI nspire CX II calculator」
  • ZephRay 发表于「On the way to overclock the TI nspire CX II calculator」
  • critor 发表于「On the way to overclock the TI nspire CX II calculator」
  • imbushuo 发表于「About Me」
  • 070 发表于「古董电脑选型」
  • Thermit 发表于「About Me」
  • 盛崖鱼 发表于「About Me」
  • Wenting Zhang 发表于「About Me」

My

RSS (中文优先)
RSS (English preferred)

坑 / Projects
关于我 / About
简历 / CV
破烂采购计划 / Craplist
古董电脑选型
SM83(GB CPU)指令编码
Linux PI 1M位跑分
Coremark跑分
音质参考

淘宝杂货铺
Bilibili空间
GitHub

Links

cnVintage古董电子论坛
cnCalc计算器论坛

Keshuai Xu
家骅的锦绣谷
>Lithia's Core
ntzyz's space
丘丘塔台
tonoko.moe
kasora's blog
447f.Misaka
paizhang.info
spinmry实验室
Hikari Calyx Tech.
春上冰月的博客
初音没有来
FindHao
Test2g
Shell Bin
LEAFER x LAB

写给玩家的FPGA入门指南(5)——Verilog(上)

2019 年 1 月 7 日分类:硬件坑#FPGA#Verilog#教程

首先,恭喜大家,一直跟到了这个教程的第五期。如之前所说,从本期开始,我们将正式开始使用Verilog给FPGA写代码。而要写的东西,这是第2-4期里面介绍过的组合逻辑,时序逻辑和状态机。而Verilog也将会是在这之后用于描述各种硬件的语言。

其实读Verilog代码本身并不复杂,有软件编程经验的人就不难理解代码的含义,毕竟其语法和C语言很接近;但是写Verilog代码,就是另外一回事了。Verilog里面有很多和C接近的概念和语句,比如赋值,比如if-else,比如for循环,等等。但是Verilog的目标结果,逻辑门,却又和C的目标结果,程序,太不一样了。他们确实某种程度上是接近的语言,但是语言里有接近的东西并不表示他们就能实现接近的功能。或者反过来,想要实现同样的功能,未必会使用接近的方法。所以说,学习Verilog最好的捷径就是不要走捷径,从数字电路开始学习,而并非一开始就学习代码,以至于被代码所迷惑。

Verilog程序模块

Verilog程序如同其它的编程语言程序一样,有它特定的源文件格式。Verilog的源代码后缀名为.v,每一个Verilog文件都是一个Verilog模块,各位可以类比为编程语言中的函数。基本格式如下:

module 模块名(模块输入输出信号);
    模块内容
endmodule

其中这个模块名通常需要和对应的文件名相同,同一个文件只定义一个模块,比如adder.v里就应该只定义一个叫adder的模块。这个要求和Java对类的要求很相似。

输入输出信号则是接近一个函数的返回值和参数,只不过在Verilog里并不把参数和返回值放到不同的地方定义,而是都写在一起。所有的参数或者返回值,最终都只是导线而已。而导线根据驱动信号的方向,可以有输入和输出区别。至于需要多少个输入多少个输出,那就取决于具体的程序了。

模块内容则是模块内部的逻辑,也许有代码块(always),也许只是一些简单的接线(assign)。不过别忘了,一切最后都会回归到硬件。

最后说说模块的实例化,或者说调用。如前面所说,模块类似于软件编程语言里面的函数,它也确实有对应的函数名,参数,返回值等等类似的概念。那么要使用这个“函数”,自然也就需要一种调用的方法。只不过,Verilog里的调用,并不是像编程语言一样在特定位置执行特定代码(毕竟本身就没有“执行代码”这种操作),而是新复制一份这个模块所表示的硬件,然后连接对应的导线。这一点在参数的定义时其实也就有所体现,定义的输入输出并非是变量,而是导线, 也就是说,传递的内容并不是数值,而是连接。一旦连接被确定,传输就是时时进行的(因为线被连接上了)。这个和编程语言里的调用非常不一样,所以务必进行区分。具体的例子我们之后就会提到。

MORE

2018年终流水账

2019 年 1 月 1 日分类:随记#事

之前还在纠结是不是要写这篇文章,因为自己看来其实好像也并没有什么意义,但是既然提起了,加上派流水账也不是那么麻烦的一件事情,还是来写一写吧。大致都是一些无聊的日常?因为确实算不上是个年终总结,所以也没有必要在标题中冒充是篇总结。

2018年1月

其实刚刚打下2018年1月这行字的时候还在怀疑自己是不是打错了。“2018年才是新的一年吧,我是不是想打2017年”然而很遗憾,今年已经是2019了,2018确确实实已经是过去了。

本月博文:

  • Eink屏幕实现32级灰度
  • IBM ThinkPad 750C & 755C (Type 9545) 展示
  • 猫娘茶会

和17年差不多,1月份总是寒假的结束和新学期的开始。没想到18年的第一篇是篇炒冷饭,NekoCal。不过也许,NekoCal是我做过的最出名的项目了吧?随后有空去南京见了皮丘(短短20天的假期我还有空去找皮丘……)然后和他在学校的一个进口产品小店里拍了些照片,感谢店主没有来赶我们,嗯……回了学校后写了篇比较无脑的展示文,其实那个展示原本应该附带个IBM软件OPL合成的效果展示,然而最后录制完之后一忙就给忘了,最终也没释出视频。

本月B站投稿:

这个月在摸鱼没有投稿。

MORE

交叉编译 OpenCV

2018 年 12 月 28 日分类:软件坑#单片机#Linux
#安装编译依赖
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

#新版本 Ubuntu 的源中没有 libjasper-dev 手动添加源
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

#创建编译目录:
mkdir opencv-build

#下载 OpenCV 源代码:
git clone https://github.com/Itseez/opencv.git

mkdir build
cd build

#创建 cmake 编译信息:
cmake -DENABLE_VFPV3=ON -DENABLE_VFPV4=ON -DENABLE_NEON=ON -DCMAKE_TOOLCHAIN_FILE=../opencv/platforms/linux/arm-gnueabi.toolchain.cmake ../opencv

#编译:
make -j4
make install

东西都在 ./install 目录下了。

编译自己的应用时注意 opencv2 头文件都是在 opencv4 文件夹下的。 编译参数:

OPENCV_INCLUDE=$(LIBPREFIX)/include/opencv4
-I$(OPENCV_INCLUDE)
-lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_flann

(笔记)使用linaro工具链构建busybox文件系统

2018 年 12 月 28 日分类:软件坑#ARM#Linux

只是做一下记录。由于uboot的兼容性问题,仍然选用gcc5。以下主要记录命令,基本可以直接复制使用。因目标平台为Cortex-A7,选择gnueabihf工具链。全文基本复读https://ntzyz.io/post/arm-v7-a-cross-compile-notes,zyz真是太强啦!

环境:Ubuntu 16.04 LTS + bash 执行用户需要具有root权限

BusyBox本体:

#建立保存下载文件的临时文件夹
mkdir temp && cd temp

#下载linaro工具链
wget http://releases.linaro.org/components/toolchain/binaries/5.5-2017.10/arm-linux-gnueabihf/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz

#解压至/opt
xz -d gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz
sudo tar xvf gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar -C /opt/

#准备目标文件系统,放置于/opt/basefiles中
sudo mkdir /opt/basefiles

#为当前session设置环境变量
export PATH=/opt/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

#下载并编译BusyBox
wget https://busybox.net/downloads/busybox-1.28.3.tar.bz2
tar xjvf busybox-1.28.3.tar.bz2
cd busybox-1.28.3
make defconfig
sudo ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make -j4 install CONFIG_PREFIX=/opt/basefiles
cd ..
MORE

写给玩家的FPGA入门指南(4)——状态机

2018 年 12 月 10 日分类:硬件坑#FPGA#教程#Verilog

大家好,欢迎回到FPGA教程的第四期。说是FPGA教程,结果一直在和大家讲数字电路的事情,但是毕竟数字电路是一切的基础,如果不理解数字电路,也许一开始玩FPGA不会有太大问题,但是越到后面就会觉得越玄。所以拥有良好的基础还是相当必要的。不过好消息是,本期就是数字电路基础的最后一期了。下一期开始就可以开始写Verilog玩FPGA了。

什么是状态机

其实各位可能之前已经听说过了状态机这个名词。状态机是个软硬件中都非常常用的设计。其实更像是一种设计模板,把需要实现的功能,划分成状态,然后套进状态机的模板中,最后实现这个状态机。那为什么要这么麻烦套成状态机再实现状态机,而不是直接实现这个电路呢?原因其实也很简单,一旦逻辑复杂到一定程度,“直接实现”会变得很难管理,而最后为了提高可维护性通常还是得引入状态机的设计。这样还不如一开始就做状态机呢。

状态机,顾名思义,必然是和 状态 相关的。状态机的主要思想就是,把一个机器的运行情况人为划分成很多不同的状态,而机器的输出,根据当前所处的状态来决定,而机器的输入则会影响到机器之后的状态。进一步到具体机器的设计,其实无非也就是要回答两个问题:

  1. 在什么状态下要做什么事情

  2. 怎么样会导致状态发生改变

比如最简单的例子,一盏灯,按一下会亮,再按一下会灭。这个机器就可以定义为有两个状态,一个是灯亮,一个是灯灭。回答第一个问题,什么状态下要做什么事情:灯亮的状态下,输出亮;灯灭的状态下,输出灭。回答第二个问题,怎么样会导致状态发生改变:灯亮的状态下,如果按键按下,就进入灯灭的状态;灯灭的状态下,如果按键按下,就进入灯亮的状态。无论何种状态下,如果没有按键按下,则停留在当前的状态。如果画成状态图的话,大致如下:

1551046828638-4-1.png

MORE
  • «
  • 1
  • …
  • 4
  • 5
  • 6
  • …
  • 32
  • »
Copyright © 2009-2019 Wenting Zhang. All rights reserved.
Unless otherwise noted, content on this blog is licensed under CC BY-SA 4.0.