叶子爱举铁的个人空间 https://blog.eetop.cn/1798294 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

verilog零散知识点记录(更新中)

热度 17已有 1286 次阅读2022-10-29 13:49 |系统分类:芯片设计

  1. 时序逻辑用“<=”,组合逻辑用“=”;其他情况不存在。

  2. 使用 always 设计的信号都定义为 reg 型,其他信 号都定义为 wire 型。

  3. always 过程块中被赋值的变 量必须是 reg (寄存器型)

  4. assign 连续赋值的对象 必须定义成 wire(线型)(System verilog中可以用assign给reg型变量赋值,综合的时候会优化,具体看我的综合器选项,verilog不支持,顺便说下sv的logic就是reg的别名)

  5. 问:解决了语法错误后,为什么提示的错误数量更多了?
    答:1. QUARTUS/VUVADI/MODELSIM报语法错误时,会提示哪一行出错。请注意,不仅要看这一行,也有可能是前面错误引起的。
    2. 在修改语法错误的时候,一个错误解决了,必不一定意味提示的错误数量的减少,也有可能变多。因为之前的错误,掩盖了其他错误。

  6. Gvim的G指的是GUI,也就是图形化界面。相当于在vim包了一层图形化界面,相比之下gvim拥有更丰富的颜色和字体,还有菜单和滚动条,以及更友好的鼠标操作,等等,除此之外差异不大。在各个主流操作系统上(windows、linux、mac)都有对应的Gvim。vi和vim的区别:vim全称Vi IMproved(vi增强版的意思),拥有超多的vi不具备的特型,可以从百科上了解下vi和vim的发展历史,vi诞生于70年代,而vim诞生于90年代初,vim是在vi的基础上改进的,但是已功能特型已远超vi,现在linux中标配都是vim,通过执行alias vi你会发现至少主流linux都用vim代替vi了。然后讲几点vi和vim具体的差异(就讲几点,不全):多级多分支撤销、语法高亮、tab和buffer、自动补全、块操作(visual mode)、vimscript语言(诞生了大量的功能丰富的插件),等等。。。都是vi不具备的。

  7. VSCODE配置Verilog   https://blog.csdn.net/qq_38376586/article/details/125683633 

                                       https://mp.weixin.qq.com/s/F3L7ZVRkAQCutiTieccHAQ

  8. Quartus打开.v文件,中文注释乱码,很可能是因为.v文件里的编码格式是ANSI,而Quartus较新的版本用的编码格式都是UTF-8,所以用记事本打开.v文件,点另存为,然后把编码格式改成UTF-8就能解决

  9. Quartus设置外置编辑器,不要直接复制路径到栏里,因为那样没引号,识别不了,还是要从Quartus里面打开文件管理器然后去选择你要用的外置编辑器

  10. ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x7f(即0000 0000~0111 1111)范围的1 个字节来表示1个英文字符。超出此范围的使用0x80~0xFFFF(即 1000 0000~1111 1111 1111 1111)来编码,即扩展的ASCII编码

    不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。

    ANSI编码电脑是认识的,问题是,ANSI编码有很多种。不同的国家和地区制定了不同的标准,在大陆是GB2312,在台湾是BIG5,在日本又成了JIS,这些都是互不兼容的。电脑遇到这种格式的文件,会根据系统当前语言环境选择对应的版本解析。这边我的电脑的语言环境是简体中文,电脑看到这ANSI编码,根据当前系统语言认为是GB2312,于是很欢乐的解析了。然而此ANSI编码非彼ANSI编码,驴头不对马嘴,自然就乱码了。

    衍生阅读:https://www.cnblogs.com/yuwen/p/3472321.html  

  11. 看波形图的规则:在每一个时钟上升沿查看信号时,如果信号的值发生了改变,那么此时的信号值为信号改变前的值。看verilog代码时要摈弃软件思维,不要联系起来看,要一个always一个always的看,看这个always里产生了什么信号,产生这个信号需要什么条件,在时钟上升沿查看条件信号时,如果条件信号的值发生改变,条件信号的值为它改变前的值。

  12. 如第一幅图所示,将vscode设置为Quartus的编辑器,但是如果像第一幅图那样设置的话是不能在Quartus里打开vscode的,必须要像第二幅图里那样设置才能从Quartus里打开vscode,原因就在于Quartus的路径设置里不能出现空格,如果出现了空格则必须要在路径外围加引号,按照第二幅图那样设置虽然可以从Quartus里打开vscode了,但是vscode打开后不会自动打开你要看的.v文件,因为你没有在最后面加%f,像第三幅图里那样设置就可以解决这个问题

  13. 问:GVIM输入快捷命令后,没有模板,并提示如下。

    1.jpg

    答:请先把文件保存为.v格式,再输入命令。

  14. 解决VSCODE任务栏图标异常:https://blog.csdn.net/lvdou1120101985/article/details/89509977

  15. verilog例化说明:https://blog.csdn.net/weixin_42470069/article/details/107421790?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-107421790-blog-78848449.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-107421790-blog-78848449.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=9

  16. 关于sof文件:sof文件是对verilog源代码编译(分析、综合、布线、生成、时序)过程中生成的一个文件生成的sof文件是可以直接通过JTAG口下载到FPGA的SRAM中去并直接执行。所以sof文件可以“看成”是原始二进制文件,当然还是有区别的,就相当于HEX文件和BIN文件的区别一样,HEX文件和BIN文件可以互相转

    sof文件下载到fpga板子上去可以实现相应的功能,但是断电之后会丢失

  17. Q:FPGA的晶振是50MHz,时钟周期为20ns,这个工作频率50MHz,时钟周期20ns是FPGA的固有硬件属性,还是说是一个可以在开发工具里由工程师自由调整改变的值?

    A:不是fpga的固有硬件属性,是外部晶振是50MHz,如果你愿意,可以换成10,30其他等等。fpga内部实际工作频率可以与输入时钟相同,也可以不同(分频或倍频)

    Q:那明德扬mp801用的晶振是50MHz的吧,这个是晶振是焊死在明德扬mp801上改不了了吧(明德扬是一家做FPGA培训的机构)

    A:是的

    Q:噢噢,那就是我也可以通过开发工具自定义我想要的频率,fpga硬件自己会倍频或者分频是吧?

    A:在pll IP核里设置分频或倍频系数

    Q:噢噢,那不设置的话那就还是按默认的50MHz来

    A:对

  18. 设计文件里写的都是我们设计的各种信号,是可以上板综合的,然后测试文件是不能综合的,只是为了产生激励然后仿真(在仿真工具里进行仿真,比如modelsim),比如串口通信实验中的rx_uart这个信号,它在测试文件里是写好了rx_uart怎么怎么变化,八个灯是有的亮有的不亮,因为它在测试文件里写的rx_uart是有1有0的各种变化,然后上板的话,激励就不像仿真那样是我们写个测试文件就能产生了,像clk这种激励是板子自己的晶振产生的,然后rx_uart这个激励的变化是用串口调试助手这个软件去产生,上板的时候一切都是真实发生的,仿真的时候我们想要什么激励就可以在测试文件里产生对应的激励输入,用于测试我们的设计。

  19. 问:仿真文件里,没有定义timescale时,那么仿真的单位是多少?(仿真文件一般指的就是用于设定如何产生激励的测试文件)

    答:仿真工具modelsim默认的单位是ns。如果有指定timescale(不一定在仿真文件中指定,任一设计文件也可以指定),则按timescale来。

  20. 关于测试文件是什么的科普:https://blog.csdn.net/qq_38502780/article/details/119942652

  21. fpga的USB下载器和USB串口是两个东西,USB-BLASTER是FPGA下载器的驱动,USB-SERIAL CH340(COM3)是FPGA的USB串口的驱动,这俩个不是一个东西,你要做串口通信的实验的话,先编译,然后通过下载器也就是JTAG接口把综合后得到的SOF文件加载到板子上,然后再用串口调试助手通过USB串口去给FPGA板子发送串口数据

  22. 你用串口调试助手传数据的时候,你想让led[0],led[1],led[4],led[5]亮,led[2],led[3],led[6],led[7]不亮,那么这个时候按照我们设计的代码你应该发送一段二进制码11001100给FPGA,转换成十六进制就是CC,这里你不要在计算器里输入11001100直接转换成十六进制,因为你这里默认输入的是十进制的11001100,不是二进制的,千万别搞错了

  23. 一般都是用时序逻辑,时序逻辑中如果设计信号a是会随着信号b的变化而变化的话,一般信号a的变化会比信号b慢一拍(俗称"打一拍"),如果要让信号a提前一拍,那就用组合逻辑来设计,没有特殊要求的话一般都用时序逻辑来设计

  24. MP801这块板子要求我把引脚AB12分配给复位信号rst_n,由原理图可知,按下板子上的复位按钮就等于接地,分配给AB12的值为0,也就是给低电平,不按的时候是3.3V弱上拉,也就是给1值,给高电平,所以上板上电的时候,你不按复位按钮,就一直给你rst_n高电平1.jpg

  25. Q:Quartus这个HOME页面不小心拖出来了,咋按回去?

    2.png

    A:按这个回去

    3.jpg

  26. 输出信号一般用always时序产生,时序电路产生的信号只有在时钟上升沿才会开始变,这样产生的信号才是没有毛刺的,没有竞争和冒险现象的

  27. Quartus中要注意工程的名称一定要与verilog的顶层模块名称一致,否则编译会出错。

6

点赞

刚表态过的朋友 (6 人)

发表评论 评论 (4 个评论)

回复 infortrans 2022-11-3 09:47
跟随学习。
回复 PayPal 2022-11-6 22:17
不错,一步一个脚印!
回复 叶子爱举铁 2022-11-10 21:46
PayPal: 不错,一步一个脚印!
谢谢大佬鼓励,我继续加油
回复 叶子爱举铁 2022-11-10 21:46
infortrans: 跟随学习。
一起加油

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 1

    好友
  • 6

    获赞
  • 4

    评论
  • 11

    访问数

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2022-12-3 17:44 , Processed in 0.034028 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部