当前位置:首页 > 新闻资讯 > FPGA之家动态 >

穿越之重回大学学fpga|第4节

时间:2024-08-08      来源:网络搜集 关于我们 0

前几天忙得很,晚上都没有时间穿越回去。最近温度高了,桌上的杨枝甘露放在冰箱里也不知道变质没有。要是普通的奶茶,肯定早就变质了吧?但是它这我估计不会那么容易坏掉。

趁着今天有空,我穿越回去一趟,继续完成我的使命。我走到冰箱前面打开冷藏室的门,为了防止这个奶茶变质,我还特意用一个保鲜袋把它套住,并且用一个夹子进行封口。摇晃了一下,刚到嘴边又拿开了,这喝了不会拉肚子吧?我去。这么多天了,细菌肯定超标了呀!

做了一会儿心理斗争最终还是喝了一小口。喝完后我直接跑卧室躺床上了。

再次睁开眼睛的时候,发现我趴在寝室的桌子上睡着了。手下面还压着手机,打开手机一看提建议的小程序还没有退出来。上面的建议也才写到一半。看来这次穿越是接着上次回现代的时候,也就是不管我什么时候穿越回去,他都会接着上次断掉的地方开始剧情。这有点像打游戏,副本探索?

这次吸取教训,赶紧干正事不废话了。写完了,建议我就准备开始学习了。这个叶凡平目前是大二,看了一下他的课程表,他已经学了C语言和电路分析,模电数电等专业课,这学期已经在开始学习VHDL语法了。

打铁还需自身硬,我要想带动周围的同学学习fpga,那我肯定自身得先有点实力是吧?那我就从他们这个语法开始学习。但是我不学VHDL,我直接学verilog,既然穿越回去了,就把能避免的坑都避免掉,不要再走错路。

上次回去的时候是中午,现在也是中午。那就先休息吧,刚好下午没有课,下午就去图书馆学习。

下午我来到图书馆,找到了一些关于FPGA的书籍。找了几本语法书,其中一本是夏宇闻的,初学者基本都会看他的语法书。个人觉得初学的时候看他的语法书已经够用了。反正一开始也没耐心来去认真学习语法,随便哪一本语法书都行。就和我之前学英语语法一样,初中的时候我觉得那英语语法枯燥乏味,实在难学。

找到语法书后,走马观花先大概看一遍,大概花一周的时间。主要要知道verilog它和C语言的联系与区别,verilog它有哪些常见的语法结构。记不住也没关系,走马观花,不求甚解,你能记多少就记多少,简单有一个印象就行。这就像非诚勿扰节目恋爱之初印象,但是你不要着急灭灯,让子弹多飞一会儿。越困难的它越有价值不是吗?

我上面说的学习verilog方法那是我“不识庐山真面目”,但是如今我穿越回来,我蓦然回首,明白学习语法应当在实际工程处。我是穿越人,我不可能用那么傻又那么老土又低效的办法去学习,想当初我不就是这么学习的吗?效果可想而知。

好了,穿越人就要有穿越人的降维打击。下面我开始学习了。

verilog学习(1)

直接找了一个串口通信的代码,通过这个代码来学习部分verilog语法。首先来看top模块。就是我们常说的顶层文件。首先我们看一下top模块的代码1到6行有哪些知识点:

模块(module) 

module是Verilog HDL最基本的概念,也是最常用的基本单元,用于描述某个设计的功能或结构以及相同通信的接口 。我们知道.c文件中可以有多个函数,与此相似的是, .v文件中也可以有很多个模块。 你没有听错,也没有看错。一个.v文件中可以有很多个module

这个知识点,可能很多干了好几年的fpga的工程师他都不知道。面试的时候,如果你的面试官他对技术的要求比较高,他不会问你多高深的问题,相反他会问你这种非常基础的问题,但是很遗憾我们很多工程师都答不上来。 我也不会。因为我和大家学习fpga的心路历程一毛一样,我也是囫囵吞枣过来的。

虽然说一个.v文件中可以有很多个module,但是我们一般不会这样干,平常我们也很少见到这种操作。我们通常是一个.v文件一个module,这样方便管理。见微知著,因此你建.v文件的时候,建议你按功能来分,一个功能一个模块。这样逻辑清晰,管理方便。

通常一个完整的模块应该包含下面的结构。

module module_name (port_list)

//声明各种变量、信号

reg//寄存器

wire//线网

parameter//参数

input/输入信号

output/输出信号

inout//输入输出信号

function//函数

task//任务

//程序代码

Initial statement

Always statement

Module instantiation

Gate instantiation

UDP instantiation

Continuous assignment

endmodule

我们可以看到下面这个top模块的module_name 是“top",这是它的模块名。它的port list,就是端口列表,包含三个输入信号,一个输出信号。三个输入信号都是线网wire型,输出信号也是wire型。

模块端口是指模块与外界交互信息的接口,包括3种类型:

(1) input:输入端口,模块从外界读取数据的接口,在模块内不可写。

(2) output:输出端口,模块往外界送出数据的接口,在模块内不可读。

(3) inout:输入输出端口,也称为双向端口,可读取数据也可以送出数据,数据可双向流动。

上述三类端口中,input端口只能为线网型数据类型;output端口可以为线网型,也可以为寄存器数据类型;而对于inout端口由于具备输入端口特点,所以也只能声明为线网型数据类型。 

先不学了,寝室室友叫我出去跑步。下次接着学。今天主要就是学习了模块的一些知识。对应top模块代码1-6行。

module top(input wire clk ,input wire rst_n ,input wire rx,output wire tx);wire[7:0] po_data ;wire po_en ;rx rx_inst(.clk (clk),.rst_n (rst_n),.rx (rx),.po_en (po_en),.po_data(po_data));tx tx_inst(.clk (clk),.rst_n (rst_n),.pi_data(po_data),.pi_en (po_en),.tx (tx));endmoduleEND精彩推荐xilinx中文文档xilinx中英文文档福袋 10元合集穿越之重回大学学FPGA | 第1节穿越之重回大学学fpga | 第2节
注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言