一.DUT概述
系统信号
clk_i 系统时钟
rstn_i 复位信号
控制及输入信号
wr_en_i 写入使能信号
set_scaler_i 设置放大倍数使能信号
wr_data_i输入数据
输出信号
rd_val_o输出数据有效标志
rd_data_o输出数据
scaler_o当前放大倍数
额外信号
no_r 输入序号(8位)
res_r 基本数字(放大后的数字)
flag 标志位
二.DUT的工作状态
1.idle
wr_en_i信号为低,DUT处于闲置周期;
2.设定放大倍数
wr_en_i信号高,同时set_scaler_i信号也为高,DUT处于设定放大倍数状态
此时,scaler_o = wr_data_i
if(wr_en_i && set_scaler_i) beginscaler <= wr_data_i;no_r <= 1'b0;res_r <= 1'b0;flag <= 1'b0;end
3.放大输入
wr_en_i信号高,set_scaler_i信号为低时,DTU处于放大状态
此时,rd_data_o = {no_r,res_r}
no_r = wr_data_i [15:8];
res_r = wr_data_i [7:0] * scaler;
写入数据高八位为序号位,低八位为数据位
if(wr_en_i && !set_scaler_i) begin scaler <= scaler;no_r <= wr_data_i[15:8];res_r <= wr_data_i[ 7:0] * scaler;flag <= 1'b1;end
三.bug设置
为了验证DUT的完整性,额外引入两个设计bug。
1.设定放大倍数为5的时候,DUT会自动更改为55;
2.Base_number为123的时候, 无论scaler是多少,都是放大100倍输出
if(wr_en_i && set_scaler_i && wr_data_i == 16'd5) beginscaler <= 16'd55; no_r <= 1'b0;res_r <= 1'b0;flag <= 1'b0;end// bug end 1else if(wr_en_i && set_scaler_i) beginscaler <= wr_data_i;no_r <= 1'b0;res_r <= 1'b0;flag <= 1'b0;end//bug start 2else if(wr_en_i && !set_scaler_i && wr_data_i[ 7:0]== 8'd123) begin scaler <= scaler;no_r <= wr_data_i[15:8];res_r <= wr_data_i[ 7:0] * 100;flag <= 1'b1;end// bug end 2
如果觉得《DUT——同相运算放大器》对你有帮助,请点赞、收藏,并留下你的观点哦!