01 2023 档案
摘要:给定一个双端口RAM作为sFIFO的存储空间,所以可以一套端口读,另一套端口写。在sFIFO里维护读写指针各一个,作为DRAM的地址。 判满判空采取扩1bit操作,只有这样才能标识反卷,指示写满。 其余地方根据RAM端口去思考要添加的控制逻辑即可 `timescale 1ns/1ns /******
阅读全文
摘要:把输出段与次态段合并即可 `timescale 1ns/1ns module fsm2( input wire clk , input wire rst , input wire data , output reg flag ); //*************code***********// l
阅读全文
摘要:普通三段式,根据状态转移图写即可。 `timescale 1ns/1ns module fsm1( input wire clk , input wire rst , input wire data , output reg flag ); //*************code**********
阅读全文
摘要:直接采用0-5计数器,虽然题目说无占空比要求,但其实只有60%占空比才能通过 `timescale 1ns/1ns module odd_div ( input wire rst , input wire clk_in, output wire clk_out5 ); //*************
阅读全文
摘要:AXI3 原子访问是一系列针对存储区域的操作。当主机想要对特定存储区域执行一系列访问时,会采用原子访问来确保该区域中的原始数据不会被其他主机写入修改。这些访问操作通常是读取、修改和写入。 在AXI5之前,主要存在两种原子访问: 锁定访问,lock,当主机对一个从机执行具有锁定访问属性的操作时,任何其
阅读全文
摘要:此题无思路,抄一个题解在这 `timescale 1ns/1ns module div_M_N( input wire clk_in, input wire rst, output reg clk_out ); parameter M_N = 8'd87; parameter c89 = 8'd24
阅读全文
摘要:根据题目中波形可以看出,周期为7,高电平和低电平分别持续3.5个周期。继续观察波形,输出信号拉高时和输入时钟下降沿对齐,拉低时和输入时钟上升沿对齐。由于同一个信号不能同时和上升沿和下降沿对齐。因此可以推断其是由两个信号进行组合逻辑得来,其中一个信号与上升沿对齐,另一个信号与下降沿对齐。由于手画的波形
阅读全文
摘要:跟上题基本类似,加了个sel选择 `timescale 1ns/1ns module seller2( input wire clk , input wire rst , input wire d1 , input wire d2 , input wire sel , output reg out1
阅读全文
摘要:用计数器对输入金额进行计数,大于等于1.5元时出货并找零。 注意在出货的同时也可能投币,并且不支持同时投入三种货币 `timescale 1ns/1ns module seller1( input wire clk , input wire rst , input wire d1 , input w
阅读全文
摘要:用计数器来翻转即可 `timescale 1ns/1ns module even_div ( input wire rst , input wire clk_in, output wire clk_out2, output wire clk_out4, output wire clk_out8 );
阅读全文
摘要:注意看波形,flag相对于data的输入延迟两拍。也就是在输入1011后,第一拍进行检测,第二拍拉高flag。 `timescale 1ns/1ns module sequence_test2( input wire clk , input wire rst , input wire data ,
阅读全文
摘要:可以用状态机也可用移位寄存器 注意题目给rst的命名不带n后缀,但其实还是下降沿触发 `timescale 1ns/1ns module sequence_test1( input wire clk , input wire rst , input wire data , output reg fl
阅读全文
摘要:比非整数倍简单 `timescale 1ns/1ns module width_8to16( input clk , input rst_n , input valid_in , input [7:0] data_in , output reg valid_out, output reg [15:0
阅读全文
摘要:输入位宽8bit,输出位宽12bit ,也就是说每三个输入数据可以生成两个完整输出。 注意给出的波形是data_lock而不是data_in,这是陷阱。data_lock是data_in打了一拍的结果。 用一个三进制计数器,按拍拼凑数据输出即可。 `timescale 1ns/1ns module
阅读全文
摘要:第一阶段:120bit+8bit 第二阶段:16bit+96bit+16bit 第三阶段:8bit+120bit 所以相当于发送了16个24bit数据,作为一个循环。第6、第11两个数据被拆开使用。 根据上述分析可知,缓存采用120bit即可够用。然后建立一个0-15计数器进行计数,对输出条件进行精
阅读全文
摘要:代码头ready_a声明为了wire型,所以是暗示用组合逻辑。 对于三个输出信号,分别来看 ready_a:用来和valid_a握手,表示当前模块可以从上游模块接收数据进行累加。所以就要判断在什么情况下,当前模块是可以接收数据的。 当输入数据不足四个时,此时可以继续接收数据,标识信号是valid_b
阅读全文
摘要:接收6个bit之后下一拍输出一个6bit宽的data,注意此时如果valid_a拉高,也要接收新进来的数据 这里用移位寄存器计数不太行,不太好让data_b在新数据出来前保持不变,虽然功能一样,但提交不通过 因此只能采用计数器来来方便进行条件判断 `timescale 1ns/1ns module
阅读全文
摘要:这个题目有点离谱,题里什么也没给,需要去题解中才知道方波、锯齿波和三角波最大值都为20,方波周期20,锯齿波周期21,三角波周期40 对三种波形具体分析 方波:周期为20且最大值也为20的方波,就是0-19的计数器,在0-9时wave输出0,在10-19wave输出20。 锯齿波:wave即为0-2
阅读全文
摘要:跟上一题基本类似,多了个valid判定当前输入数据是否有效 `timescale 1ns/1ns module sequence_detect( input clk, input rst_n, input data, input data_valid, output reg match ); reg
阅读全文
摘要:AXI原子操作 协议原文 单拷贝原子大小 AXI4协议引入单拷贝原子概念。这个术语定义了事务原子操作更新的最小字节数。AXI4协议要求一个大于单拷贝原子大小的事务,必须更新至少大于单拷贝原子大小的内存块。 原子操作并没有定义数据更新的确切时刻。必须保证的是,任何管理者都不能观察到原子数据的更新过程。
阅读全文
摘要:还是移位寄存器,加一个计数器来限制周期 题目要求状态机,懒得画了,移位寄存器可根据时序图直接写 `timescale 1ns/1ns module sequence_detect( input clk, input rst_n, input data, output reg match, outpu
阅读全文
摘要:跟上一题类似 这里有人可能会用到casex,最好别用,有的工具可能不支持 `timescale 1ns/1ns module sequence_detect( input clk, input rst_n, input a, output reg match ); reg [8:0] temp ;
阅读全文
摘要:检测01110001序列,满足序列则拉高match 可以用状态机和移位寄存器,懒得画状态转移图,直接用移位寄存器解 注意题中match在检测到序列后的下一周期拉高,所以需要延一拍 `timescale 1ns/1ns module sequence_detect( input clk, input
阅读全文