云南省城乡与住房建设厅网站,合肥设计工作室,wordpress空白,网站怎样做自适应分辨率大小前言#xff1a;本专栏旨在记录高频笔面试手撕代码题#xff0c;以备数字前端秋招#xff0c;本专栏所有文章提供原理分析、代码及波形#xff0c;所有代码均经过本人验证。目录如下#xff1a;1.数字IC手撕代码-分频器#xff08;任意偶数分频#xff09;2.数字IC手撕代…前言 本专栏旨在记录高频笔面试手撕代码题以备数字前端秋招本专栏所有文章提供原理分析、代码及波形所有代码均经过本人验证。目录如下1.数字IC手撕代码-分频器任意偶数分频2.数字IC手撕代码-分频器任意奇数分频3.数字IC手撕代码-分频器任意小数分频4.数字IC手撕代码-异步复位同步释放5.数字IC手撕代码-边沿检测上升沿、下降沿、双边沿6.数字IC手撕代码-序列检测状态机写法7.数字IC手撕代码-序列检测移位寄存器写法8.数字IC手撕代码-半加器、全加器9.数字IC手撕代码-串转并、并转串10.数字IC手撕代码-数据位宽转换器宽-窄窄-宽转换11.数字IC手撕代码-有限状态机FSM-饮料机12.数字IC手撕代码-握手信号READY-VALID13.数字IC手撕代码-流水握手利用握手解决流水线断流、反压问题14.数字IC手撕代码-泰凌微笔试真题15.数字IC手撕代码-平头哥技术终面手撕真题16.数字IC手撕代码-兆易创新笔试真题17.数字IC手撕代码-乐鑫科技笔试真题4倍频18.数字IC手撕代码-双端口RAMdual-port-RAM ...持续更新 更多手撕代码题可以前往 数字IC手撕代码--题库题目使用 v/sv 编写如下功能模块求输入信号序列 din 在 din_vld 为高电平的时间段内的次小值与次小值出现的次数接口信号如下module sec_min(input clk,//时钟input rst_n,//复位input [9:0] din, //10bit 无符号数input din_vld, //输入数据有效信号output [9:0] dout, //次小值output [8:0] cnt //次小值出现的次数。溢出时重新计数)原理分析题目要找次小值和次小值出现的次数我们就可以做两个变量一个变量存储最小值min一个变量存储次小值sec_min。这样就有几种可能① 输入din min:那我们就让min din, sec_min min此时要注意的是这时候随着次小值和最小值交换顺序次小值出现的次数也会变成最小值出现的次数因此不仅要将最小值赋值给次小值还要将最小值出现次数赋值给次小值出现次数。② 输入din min需要统计最小值出现的次数在dinmin时令cnt_sec cnt_min。③ 输入din min_sec次小值刷新最小值不变令次小值min_sec din同时令次小值计数器cnt_sec 1。④ 输入din min_sec最小值和次小值均不变次小值计数器加一。⑤ 输入din min_sec啥也不干。代码module sec_min(input clk , //时钟input rst_n , //复位input [9:0] din , //10bit 无符号数input din_vld , //输入数据有效信号output [9:0] dout , //次小值output [8:0] cnt //次小值出现的次数。溢出时重新计数
);reg [10:0] min,sec_min; //minimum and second minimum
reg [8:0] cnt_sec,cnt_min;
reg [9:0] dout_reg;always (posedge clk)beginif(!rst_n)begincnt_sec 9d0 ;cnt_min 9d0 ;dout_reg 10d0 ;min 11b111_1111_1111;sec_min 11b111_1111_1111;endelse if(din_vld)beginif(din min)beginmin din ;sec_min min ;cnt_sec cnt_min ;cnt_min 9d1 ;endelse if(din min)begincnt_min cnt_min 1b1;endelse if(din sec_min)beginsec_min din ;cnt_sec 9d1 ;end else if(din sec_min)begincnt_sec cnt_sec 1b1;endend
endassign dout sec_min;
assign cnt cnt_sec;endmoduletestbenchmodule tb_sec_min();reg rst_n,clk;reg [9:0] din ;
reg din_vld ;
wire [9:0] dout ;
wire [8:0] cnt ;task input_num;
input [9:0] number;
begin(posedge clk)begin #1din number;end
end
endtaskinitial beginrst_n 1;clk 0;din_vld 0;#5rst_n 0;#20rst_n 1;din_vld 1;repeat(2) begininput_num(15);endrepeat(3)begininput_num(19);endinput_num(18);input_num(17);input_num(16);input_num(14);#30;
end always #5 clk ~clk;sec_min u_sec_min(
.clk (clk) ,
.rst_n (rst_n) ,
.din (din) ,
.din_vld (din_vld) ,
.dout (dout) ,
.cnt (cnt)
);endmodule波形图输入序列为15,15,19,19,19,18,17,16,16,14随着序列的输入最小值会从一开始的不可能的取值1023,计数器0依次变为19计数1~3次18计数1次17计数1次16计数1次15计数2次。结果验证正确。