![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
HDLBits
早睡身体好~
xidian university
展开
-
关于2的补码(2‘s complement)和 2的补码转换器状态机(2's complementer Moore/Mealy state machine)
关于2的补码问一个基本的问题。负数在计算机中如何表示?举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢?很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,在8位机中,规定每个字节的最高位为符号位。那么,+8就是00001000,而-8则是10001000。但是,随便找一本《计算机原理》,都会告诉你,实际上...原创 2020-03-04 15:51:30 · 1919 阅读 · 4 评论 -
用Verilog实现二维细胞自动机——康威生命游戏(Conway's Game of Life)
在一个二维的棋盘上,每个格子有存活(1)和死亡(0)两种状态。在每个时间周期,每个格子会根据他的8个邻居来决定自己下一个周期的状态:0-1个邻居:人口稀少,死亡(0); 2个邻居:保持原状态; 3个邻居:繁衍(1); 4+个邻居:人口过多,死亡(0);这个游戏原来是设计在一个无限的网格里,但是在这个电路中,我们设计为16*16的网格,为了让这次练习更有趣,我们把网格边界拓扑环绕到对立的...原创 2019-06-10 10:48:42 · 3036 阅读 · 4 评论 -
用Verilog实现最简一维细胞自动机(one-dimensional cellular automaton)
首先,我们通过观察上表可以很容易的发现一个规律,center的下一个状态由center的左邻居和右邻居异或而成。center的下一个状态列:01011010,转换为十进制即为90,所以我们将其命名为rule 90.知道了下一状态产生的规则后,我们就根据其规则实现下面这个电路:在这个电路中,我们创造512个细胞系统(q[511:0]),在每个时钟周期前进一个步长。load输入将输出q加载...原创 2019-06-06 17:59:34 · 1689 阅读 · 0 评论 -
双边沿触发器
双边沿触发器在时钟的每个上升沿和下降沿都会触发。但是在FPGA中没有双边沿触发器,并且像always @(posedge clk or negedge clk)这样的描述方式并不合法。建立如下一个类似双边沿触发器的的电路:Hint:在FPGA中不能创造双边沿触发器,但是我们可以把上升沿触发器和下降沿触发器都创造出来。 这个题是一个中等难度的电路设计题,但是只需要基础的Verilo...原创 2019-05-30 18:22:03 · 9842 阅读 · 0 评论 -
边沿检测电路
module top_module ( input clk, input [7:0] in, output [7:0] anyedge); reg [7:0] d_last; always @(posedge clk) begin d_last <= in; // Remember the state of the previous cy...原创 2019-05-29 12:34:28 · 4259 阅读 · 0 评论 -
Verilog语言之模块层级:模块的实例化
1.例化语法一个模块能够在另外一个模块中被引用, 这样就建立了描述的层次。模块实例化语句形式如下:module_name instance_name(port_associations) ;连接信号到模块端口有两种常用的方法将信号连接到端口上:位置和名称。位置通过位置将信号连到端口上的语法应该比较熟悉,因为这是类c语言的语法。当实例化一个模块时,根据这个模块声明时的端口顺序从...原创 2019-05-17 16:55:30 · 15415 阅读 · 0 评论 -
Verilog语言之其他功能:组合逻辑for循环和generate生成块for循环
例1:给一个100位的输入向量,颠倒它的位顺序输出只需要将in[0]赋值给out[99]、in[1]赋值给out[98]......也可以直接用for循环,其规范格式如下:for(循环变量赋初值;循环执行条件;循环变量增值) 循环体语句块;通过for循环赋值很方便:module top_module ( input [99:0] in, output reg [9...原创 2019-05-21 11:18:10 · 7478 阅读 · 1 评论 -
Verilog语言之向量vector和解压缩数组unpacked array
今天在HDLbits网站学习的时候遇到一个有趣的东西,记录一下,也是第一次翻译文章。为了更加方便操作,将相关联的信号用一个名字组成向量。比如,wire [ 7:0 ] w ; 声明了一个8位的向量w,这等价于w拥有8根分离的线。声明向量向量必须被声明: 类型 [ 最高位:最低位 ] 向量名字类型指的是向量的数据类型,最常用的是wire和reg。当声明输出或输入端口时,类型...原创 2019-05-10 22:12:24 · 5449 阅读 · 0 评论 -
Verilog语言之结构语句:if、case
if语句一个if语句通常可以创造出一个2选1选择器,当条件为真时选择一个输入,为假时选择另一个。always @(*) begin if (condition) begin out = x; end else begin out = y; endend这等同于连续性赋值语句的条件运算符:assign out ...原创 2019-05-20 11:30:57 · 13185 阅读 · 0 评论 -
Verilog语言之结构语句:Always过程块和assign连续赋值语句
数字电路是用线将逻辑门连接起来组合而成的,任何电路都可以用一些模块的组合和赋值语句来表示。但是,有时候这并不是描述电路最为方便的方法。结构语句(Procedures:always, initial, task, function)为描述电路提供了更多的选择。对硬件综合来说,有两种最重要的always块:组合: always @(*) 时钟: always @(posedge clk)组...原创 2019-05-19 18:28:14 · 18109 阅读 · 3 评论