学校局域网站建设,wordpress后台登录网址,深圳坪山地图,重庆企业建站程序专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点#xff0c;刷题网站用的是牛客网 要实现8bit数据至12bit数据的位宽转换#xff0c;必须要用寄存器将先到达的数据进行缓存。8bit数据至12bit数据#xff0c;相当于1.5个输入数据拼接成一个输出数据#… 专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点刷题网站用的是牛客网 要实现8bit数据至12bit数据的位宽转换必须要用寄存器将先到达的数据进行缓存。8bit数据至12bit数据相当于1.5个输入数据拼接成一个输出数据出于对资源的节省以及时序要求采用1个8bit的寄存器data_lock进行数据缓存。 根据时序图数据是在第二个数据到来之后输出当仅有一个数据到来时不产生输出所以内部设计一个计数器valid_cnt用来指示数据接收状态。当检测到valid_in拉高时valid_cnt加1valid_cnt在0-2之间循环valid_cnt复位值是0。当valid_cnt是1或2且valid_in为高时输出数据valid_out拉高。 timescale 1ns/1nsmodule width_8to12(input clk , input rst_n ,input valid_in ,input [7:0] data_in ,output reg valid_out,output reg [11:0] data_out
);reg [7:0] data_lock ; reg [1:0] valid_cnt ; always (posedge clk or negedge rst_n) beginif (~rst_n) data_lock d0 ; else if (valid_in) data_lock data_in ; endalways (posedge clk or negedge rst_n) begin if (~rst_n) valid_cnt d0 ; else if (valid_in) if (valid_cnt 2d2) valid_cnt d0 ; else valid_cnt valid_cnt 1d1 ; endalways (posedge clk or negedge rst_n) begin if (~rst_n) valid_out d0 ; else if (valid_in (valid_cnt 2d1 || valid_cnt 2d2)) valid_out 1d1 ; else valid_out d0 ;endalways (posedge clk or negedge rst_n) begin if (~rst_n) data_out d0 ; else if (valid_in valid_cnt 2d1) data_out {data_lock, data_in[7:4]} ;else if (valid_in valid_cnt 2d2) data_out {data_lock[3:0], data_in} ; endendmodule