![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Verilog学习日志
文章平均质量分 52
Fantaasky
这个作者很懒,什么都没留下…
展开
-
Verilog学习日志(2021.8.28)
2021.8.281.继续刷HDL bits。(127)设计一种逻辑,一个小人撞到墙的时候可以自动往相反的地方跑,如果两边都有墙被撞到的话就往前一个方向的相反方向跑动。(128)对上一个逻辑进行延伸,引入掉落的逻辑,如果接触不到地面,就发生掉落,同时发出aaah的叫声,然后如果在掉落后再接触到地面,就再一次以之前那个方向进行跑动。//做这题的时候要意识到,最小项之和的逻辑函数表示形式,需要里面元素的各个值都是1bit的,如果不是1bit的话,就需要用到按位的与或运算符。不然即使编译不出错,最原创 2021-09-02 16:42:47 · 92 阅读 · 0 评论 -
Verilog学习日志(2021.8.25)
2021.8.251.刷HDLbits(122)给你一个状态转换表,要你通过RTL代码把三段式里面的状态转换逻辑和输出逻辑写出来,简单。(123)这个one-hot FSM是啥..(124)给定状态转换表写一个带有四个状态一个输出一个输入的有限状态机,它有异步复位端。(125)把上题的异步复位端换成同步复位端。(126)设计一个控制出水的逻辑。有3个感应器,不同的情况控制不同的注水程度。这题题目好长懒得看。...原创 2021-09-02 16:42:04 · 78 阅读 · 0 评论 -
Verilog学习日志(2021.8.23&2021.8.24)
2021.8.23前两天出去玩了,然后在玩的过程中自己设计了一个生命游戏的写法,但是似乎并不能正确运行。自己的思路很清晰,但是仿真出来的结果还是incorrect..(117)生命游戏。我自己的思路大概如下:设计一个函数用于判断一个元素周围的八个八个元素中1的个数,并因此判断在下一个生命周期这个元素的值是多少。在一个16x16的环境当中,把元素分成四个边角和两种边沿这几种情况,还有在棋盘中的一般情况,然后根据这几种情况来带入上面设计的函数,然后完成设计。棋盘的元素地址分布如下(省略棋盘中间的原创 2021-08-25 02:26:55 · 115 阅读 · 0 评论 -
Verilog学习日志(2021.8.18&2021.8.19)
2021.8.18(107)设计一个带有左右方向移位和置位端的移位寄存器。这题我认为解法有两种:通过与或门直接把逻辑函数通过最小项之和的形式列出来; 通过在always过程块当中的多次条件语句来进行赋值。//使用第①种方法的时候出现incorrect:不知道这个逻辑函数有没有什么问题...//不过使用第②种方法可以完美解开题目。(108)设计一个带有使能端、置位端和控制端的算术移位寄存器,其中控制端控制移位的方向和算术移位的位数。做这题既可以使用之前的多重if-else结构,原创 2021-08-20 01:25:27 · 140 阅读 · 0 评论 -
Verilog学习日志(2021.8.17)
2021.8.171.继续做(105)题。(105)通过真值表和卡诺图对逻辑函数进行梳理和简化,并推导出8个bit的变量对应的逻辑函数: 把以上函数写到代码中: 在完成60进制计数器和12进制计数器的设计之后开始设计顶层模块。先实例化时分秒三个计数器: 然后连接各个接口,包括pm信号: 然后开始仿真。在初步仿真时出现以下报错: 考虑是60进制计数器模块里10进制计数器和外部相连的变量carry被重.原创 2021-08-18 01:04:49 · 70 阅读 · 0 评论 -
Verilog学习日志(2021.8.16)
2021.8.161.HDLbits刷题。(104)设计一个基于BCD编码器的十进制计数器。//在设计BCD编码器的时候,要注意enable、reset、” q == 4’d9 ”的优先级,在多重if-else中有所体现。(105)设计一个二十四小时为周期的时钟。我的初步构想是实例化两个60进制计数器和一个12进制计数器。由于时、分、秒的输出信号按题目要求是由两位十进制所转化而成的两个四位二进制信号组成,所以我构思的电路如下:60进制计数器的设计思路是先设计一个10进制计数器:原创 2021-08-17 00:46:28 · 139 阅读 · 0 评论 -
Verilog学习日志(2021.8.13)
2021.8.131.前段时间刷了一些王红老师的网课,把数电书翻出来重新看了一部分和时序逻辑相关的内容。2.继续刷HDLbits和计数器相关的内容。(98)设计一个带同步复位的四位计数器。(99)设计一个带同步复位的四位计数器,从0到9,到9时复位。(100)设计一个带同步复位的四位计数器,从1到10,到10时复位。我是加了一个wire变量作为总输出,把always过程块的输出加1后接到总输出就行了。(101)设计一个带有同步复位端和置数端的四位十进制计数器。需要注意到的是,在使用到原创 2021-08-13 23:14:05 · 328 阅读 · 0 评论 -
Verilog学习日志(2021.8.4&2021.8.5)
2021.8.41.思考之前的问题。(96)发现似乎明白了这题的意思了。①如何实现一个值对out的覆盖,而在这个值改变成低电平的时候out不随着改变(out的初始值是低电平)?正确思路是设置一个中间值,然后整一个判断语句,如果中间值是1的话,就可以写进去,如果是0的话就写不进去。这样就算中间值改变成低电平的时候也不会改变out了。②为什么对于中间值capture的定义是wire变量呢?是不是如果是capture变量的话理论上out变量会再往后移一个CLK(?)2021.8.51.原创 2021-08-06 01:01:48 · 67 阅读 · 0 评论 -
Verilog学习日志(2021.8.4&2021.8.5)
2021.8.41.思考之前的问题。(96)发现似乎明白了这题的意思了。①如何实现一个值对out的覆盖,而在这个值改变成低电平的时候out不随着改变(out的初始值是低电平)?正确思路是设置一个中间值,然后整一个判断语句,如果中间值是1的话,就可以写进去,如果是0的话就写不进去。这样就算中间值改变成低电平的时候也不会改变out了。 ②为什么对于中间值capture的定义是wire变量呢?如果是capture变量的话理论上out变量会再往后移一个clk(?)2021.8.5原创 2021-08-06 00:59:00 · 88 阅读 · 0 评论 -
Verilog学习日志(2021.8.2)
2021.8.21.继续HDLbits,把(94)这个硬骨头啃下来。(94)设计一个上边沿检测电路.设计思路如下:先定义一个临时值temp。①这时in[1]还是低电平的状态,这种低电平的状态被赋给temp。②这时in[1]已经变成高电平了,而temp还是低电平。所以在这个时候in[1]和(~temp)的与门就是高电平了。然后在pedge被赋值之后temp又被赋值1。③这个时候in[1]和temp都是高电平,所以pedge又被赋值0。至此,边缘检测的任务就完成了。//.原创 2021-08-03 01:46:22 · 137 阅读 · 0 评论 -
Verilog学习日志(2021.8.1)
2021.8.11.刷HDLbits。(89)在一个上升沿D触发器前面加一个异或门,把输入和输出的反馈回路连上。(90)设计一个带有MUX和Q触发器的模块。(91)设计一个带有两个MUX、Q触发器和反馈回路的模块。(92)设计一个带有各种逻辑门和Q触发器的电路,我选择使用模块实例化的思路进行设计,应用了层次化设计的思路,提高了整个代码的可读性。//报错: 这样仿真出来的图像如下: 代码检查了很多遍了,依然找不出来问题出...原创 2021-08-02 00:45:43 · 117 阅读 · 0 评论 -
Verilog学习日志(2021.7.31)
2021.7.311.结合王红大大和我之前的考研笔记,重新很快地过一遍数电里面触发器和时序逻辑的内容。2.初步尝试HDLbits里面的时序逻辑题。(80)设计一个最简单的上升沿D触发器。//注:使用always过程块进行时序逻辑的描述时,上升沿为:always @ ( posedge clk );下降沿为:always @ ( negedge clk );(81)设计一个处理8位数据的上升沿D触发器。(82)在(81)的基础上加一个高电平有效的同步复位信号。考虑以原创 2021-08-01 01:05:20 · 151 阅读 · 0 评论 -
Veriog学习日志(2021.7.26)
2021.7.261.用generate循环结构解决了(41)题和(42)题。(41)实例化100个全加器,获得一个100位的二进制串行进位加法器。(42)实例化100个四位的bcd加法器,获得一个能相加400位的二进制串行进位加法器。2.有符号数运算初步:①有符号数相加实际上就是补码相加。②正数的补码是其原码,负数的补码是其反码加一,但是符号位不变。③然后对相加的两者进行数值上的相加,包括符号数。④对相加的结果再取一次补码。对有符号数运算有了初步的了解,但还是做不出(6原创 2021-07-30 21:39:03 · 122 阅读 · 0 评论 -
Verilog学习日志(2021.7.24)
2021.7.241.前段时间有准备家教和兵检等等事情,今天准备继续Verilog的学习。花了一个早上把之前的学习日志都重新浏览了一遍,然后把一些自己觉得重要的地方划了重点。感觉下午可以看一看generate相关的网课,补一下这方面的知识,然后看看能不能用generate语句来把之前几道题做一下。之后把有符号数运算的相关知识点再过一遍。看一看function之类的,可以参考一下菜鸟教程里面的描述和网课里面的说法,把相关的笔记写到这里面。2.generate相关知识点:genera原创 2021-07-25 00:11:34 · 131 阅读 · 0 评论 -
Verilog学习日志(2021.7.14)
2021.7.141.先把69题有符号数运算放一边,开始Karnaugh Map的小单元。(72)很简单,简化一个3变量的k-map,设计成电路。(73)简化一个4变量的k-map,设计成电路。//out = b’c’ + a’bc’d’ + a’b’cd’ + a’bc + acd(74)简化一个带无关项的4变量k-map,设计成电路。//out = a’b’c + a;(75)一个4变量的k-map,设计成电路。//out = a’bc’d’ + ab’c’d’ + a’原创 2021-07-14 17:47:47 · 139 阅读 · 0 评论 -
Verilog学习日志(2021.7.13)
2021.7.131.把MUX的五道题全部做完。(60)设计一个2选1MUX。(61)设计一个处理100位并行数据的2选1MUX。(62)设计一个9选1MUX。(63)设计一个256选1MUX。(64)设计一个4 bit为单位,256选1的MUX。//我一开始选择使用assign语句:assign out = in[ (4*sel)+3 : 4*sel ];在综合的时候报错:sel is not a constant File去知乎问,被破防了,他们说这是用写C的原创 2021-07-14 02:37:52 · 1169 阅读 · 0 评论 -
Verilog学习日志(2021.7.12)
2021.7.121.先整几道circuits的题目。(43)实现input和output用·线直接连接的电路。(44)把一个信号接地。(45)整一个或非门出来。(46)整一个先把in2取反的与门。(47)整两个逻辑门。(48)把几乎所有基础逻辑门都拿来用了。(49)设计芯片7420。(50)实现用真值表表示的逻辑函数。(51)实现若两输入相等则输出1的电路。(52)实现用逻辑式表示的逻辑函数。(53)实现用行为级仿真图表示的逻辑函数。(54)结合前两个电原创 2021-07-13 17:29:30 · 86 阅读 · 0 评论 -
Verilog学习日志(2021.7.11)
2021.7.111.智齿恢复的差不多了,继续学习。(34)明白了,我审题目审错了啊...真值表都写错了...低级错误(35)为了防止出现综合出寄存器的情况,在条件语句中应该把所有条件全部写全。前面用了default作为条件的方法,这里引入另一个思路:就是先给条件语句的输出值提前赋值为初始值,再在条件语句中对对应输出进行覆盖赋值。(36)Verilog有一个比较短的条件语句名为conditional operator。①它也可以被综合成MUX。②不论是连续赋值还是过程赋值都可以用,很原创 2021-07-12 00:21:06 · 193 阅读 · 0 评论 -
Verilog学习日志(2021.7.5)
2021.7.5今天白天去拔智齿了,所以学习时间受到了一定影响。尽量看能做多少做多少,(32)在always过程块之中可以用case语句来代替多个if-else语句。①case语句和C语言里面的switch case写法稍有不同,应该注意。②switch case里面有break语句,case语句只能执行一个语句,如果要执行多条要使用begin...end语句块。③case语句允许条件重合,然后执行程序匹配到的第一个,而switch case语句不允许。④case语句是串行执行的。原创 2021-07-06 00:04:59 · 300 阅读 · 0 评论 -
Verilog学习日志(2021.7.4)
2021.7.4继续HDLbits,今天procedures能做多少做多少。(28)其实逻辑门和连线的结合就能表示所有数字电路了,但是有了procedures(过程块)之后就可以缩短描述数字电路的时间成本了。①过程块内部语法和外部是不一样的,其内部会有更加丰富的关键字和语句集。②在内部模块当中一般不允许连续赋值,可以存在的一般都被放在initial语句当中作为不可综合的成分。③过程块外部是和其他语句一起并行执行的,而过程块内部是串行执行的。④对于组合always块,敏感变量列表总是使原创 2021-07-04 22:49:40 · 166 阅读 · 0 评论 -
Verilog学习日志(2021.7.3)
2021.7.31继续HDLbits,今天的任务是把module学完。(25)要我用两个16位的加法器做一个32位的加法器,电路思路都给我了,简单。(26)和前面那题差不多,只是16位加法器里面的1位进位加法器要我写module。对于参数sum的运算,我没有用hint给的异或写法,我用的是自己通过真值表整理出来的东西(自己写的果然bug了好多次hhh)。然后我自己也尝试写一下16位加法器的module,很stupid地实例化了16个1位进位加法器,然后导致代码写了一百多行。因为我不懂实.原创 2021-07-04 02:09:48 · 84 阅读 · 0 评论 -
Verilog学习日志(2021.7.2)
2021.7.21把language里面的vectors最后两题撸完。(18)在concatenation中可以用系数来表示成倍的小向量。以及对有符号数进行扩容的方法就是把它的最高项(符号值)扩充,负数的符号值是1,正数是0.(19)把五个wire变量按不同方式合成两个大向量,然后拿他们按位求同或。//我在解这题的时候忘了一件事情,就是在声明了向量大小的情况下,直接引用这个向量的名字实际上是按顺序引用这个向量的所有元素!解这题的时候我甚至还想用循环语句!2.module部分的话起个头吧。原创 2021-07-03 02:36:57 · 146 阅读 · 0 评论 -
Verilog学习日志(2021.7.1)
2021.7.11.继续在HDLbits刷题。(11)开始学向量的内容。一个8位wire向量等同于把八个独立信号排在一起。可以把它看作数组,要选取其中一位只要通过”[n]”实现即可。(12)掌握和向量相关的细节。①向量一定要先声明。//type [upper:lower] vector_name;声明向量的type一般是wire或者reg,port type一般是input或者output。以下是一些例子:output reg [3:0] y; //port type: out原创 2021-07-02 02:16:03 · 358 阅读 · 1 评论 -
Verilog学习日志(2021.6.29)
2021.6.291.参考大佬老石谈芯的FPGA入门学习路线,整理一下。(1)编程语言一开始先在主流语言VHDL和Verilog中选一个,后期再考虑另外一个。学习一个语言,先学语法,然后学怎么用这个语言做设计,然后学习怎么用这个语言做验证。HDL语言的语法可分成可综合和不可综合的部分。可综合部分用于设计电路,不可综合部分用于仿真和验证。建议先学可综合部分,验证可以进阶的时候再学。推荐HDL bits用于做题。//太好了!RTL电路设计主要分为组合电路和时序电路还有状态机三个部分。原创 2021-07-02 02:09:54 · 258 阅读 · 0 评论