这次设计一个多字节(8-256位)且波特率可更改(通过修改例化模块的参数)的串口发送模块。1、状态机的设定状态机的设定有空闲、发送、和数据移位三个状态,其中空闲状态为等待多字节发送的信号;发送状态为给8位串口发送模块传输待发送的8位数据,同时判断是否发送完数据回到空闲状态;数据移位状态为等到前面8位字节数据发送完后,将接下来待发送的8位数据移动到数据寄存器的低8位中。若数据在发送中则会进行等待;2、需要的模块(1)8位串口发送模块`timescale1ns/1ps//////////////////////////////////////////////////////////////////
概述 ZYNQ分为PS和PL两部分,PS端即ARM,PL即FPGA。在使用ZYNQ的时候不免需要PS和PL端进行通信。大多是情况下PS作为主端,PL作为从端,通过AXI总线实现PS-PL端的通信。本文主要介绍PL(即FPGA)如何配置的。BlockDesign创建 1.点击CreateBlockDesign,添加ZYNQ7ProcessingSystemIP 2.双击打开ZYNQ7ProcessingSystem,下图所示表示PS作为主端的接口。 3.加入AXIInterconnectIP,由于上一步只设置了一个主端,所以Slave和Master都需要设置为1 接下来就需要AX
Tb/clock这题要求给dut模块一个时钟。moduletop_module();regclk;always#5clk=~clk;initialbeginclk=0;enddutu0(clk);endmoduleTb/tb1产生指定的波形,使用延时语句给信号赋值即可。moduletop_module(outputregA,outputregB);////generateinputpatternshereinitialbeginA=0;B=0;#10A=1;#5B=1;#5A=0;#20B=0;endendmoduleTb/and题目要求对一个与门进行测试,要求产生波形图中的激励向量。modu
Sim/circuit1从波形不难看出ab是相与的关系。moduletop_module(inputa,inputb,outputq);//assignq=a&b;//FixmeendmoduleSim/circuit2 根据波形图可以画出卡诺图并且之前有写过这个卡诺图的逻辑表达式,不难看出相邻逻辑输出会取反,所以这个是一个四变量的异或,0000输出为1,所以还要再取反。moduletop_module(inputa,inputb,inputc,inputd,outputq);//assignq=~(a^b^c^d);//FixmeendmoduleSim/circuit3继续画卡诺图 m
Bugsmux2原本代码的逻辑是反的,这不是坑人吗。moduletop_module(inputsel,input[7:0]a,input[7:0]b,output[7:0]out);assignout=({8{sel}}&a)|({8{~sel}}&b);endmoduleBugsnand3五输入的与门现在要实现三输入的与非门,多余的门可以输入1并将输出取反。moduletop_module(inputa,inputb,inputc,outputout);//wireout_n;andgateinst1(out_n,a,b,c,1'b1,1'b1);assignout=~out_n;endm
Alwaysblock1组合逻辑always块的使用,注意这里的wire和reg综合出来的结果是一样的,这里只是verilog语法导致二者声明不一样。//synthesisverilog_input_versionverilog_2001moduletop_module(inputa,inputb,outputwireout_assign,outputregout_alwaysblock);assignout_assign=a&b;always@(*)beginout_alwaysblock=a&b;endendmoduleAlwaysblock2组合逻辑用阻塞赋值,时序逻辑用非阻塞赋值,这里
Module模块例化的两种方式:按端口位置例化、按端口名例化。moduletop_module(inputa,inputb,outputout);mod_ainstance1(.in1(a),.in2(b),.out(out));endmoduleModulepos按端口顺序例化。moduletop_module(inputa,inputb,inputc,inputd,outputout1,outputout2);mod_ainst(out1,out2,a,b,c,d);endmoduleModulename按端口名例化moduletop_module(inputa,inputb,inputc
Vector0向量赋值。moduletop_module(inputwire[2:0]vec,outputwire[2:0]outv,outputwireo2,outputwireo1,outputwireo0);//Modulebodystartsaftermoduledeclarationassignoutv=vec;assigno2=vec[2];assigno1=vec[1];assigno0=vec[0];endmoduleVector1注意使用未声明的接口会隐式地生成一个1bit的wire变量,加一个`default_nettypenone可以不隐式声明,从而找到一些隐藏的bug。
挺早以前就刷了里面一些题,结果不知道为啥登录账号刷题记录又没了,强迫症又让我不想从中间开始刷。既然如此,那就从头开始刷吧。QWQStepone第一题,没啥好说的。moduletop_module(outputone);//Insertyourcodehereassignone=1'b1;endmoduleZero同样没啥好说的。moduletop_module(outputzero);//Modulebodystartsaftersemicolonassignzero=1'b0;endmoduleWireassign赋值。moduletop_module(inputin,outputout);
目录总结:1)实验1部分2)实验2部分3)实验3部分实际的仿真结束掌握在generatorgenerotor和initiator的握手通信为了便于外部chnl_root_test直接控制并randomize发送数据,故把 generator从agent里面拿出来 验证结构接下来看fifo_full_test中的内容 总结:1)实验1部分主要是修改chnl_trans类,并对里面要发送的数据添加rand,便于随机化,并尝试使用生成随机种子命令-sv_seedrandom来生成不同的数据,最后1.4 是熟悉通过mailbox握手通信的过程,生成了两个对象req和rsp, 而在同一时刻,最多有3个