Q&A:filter-符号位扩展的VERILOG设计

Q:

杜老师您好,关于数字滤波器的MATLAB与FPGA实现(Altera版)书中有些问题请教:

在7.4.3节自适应均衡器的verilog实现中,有一段程序学生实在理解不了,就是在求取滤波器输出信号及误差信号时:

begin

Y1_out <={{3{Y_Reg[0][31]}},Y_Reg[0]}+{{3{Y_Reg[1][31]}},Y_Reg[1]}+{{3{Y_Reg[2][31]}},Y_Reg[2]}; 

Y2_out <={{3{Y_Reg[3][31]}},Y_Reg[3]}+{{3{Y_Reg[4][31]}},Y_Reg[4]}+{{3{Y_Reg[5][31]}},Y_Reg[5]}+{{3{Y_Reg[6][31]}},Y_Reg[6]}; 

Y_out <= Y1_out + Y2_out;

if (count==3)

           E_out <={{5{Rin_Reg[3][15]}},Rin_Reg[3]}-Y1_out[34:14]-Y2_out[34:14];

end   

其中例如{{3{Y_Reg[0][31]}},Y_Reg[0]}意思是把第0路的结果Y_Reg的符号位复制3次放在高位然后和自己拼接对吧?现在学生不理解为何是复制3次放高位这样的操作?

还有计算DW_Reg[n]时  DW_Reg[n] <= -{{7{Xin_Reg[n][15]}},Xin_Reg[n][15:7]};中,也是复制最高位7次放在高位。

还请老师能百忙中指点迷津,学生感激不尽!

A:

这只是一个符号扩展的VERILOG操作。由于操作数是有符号数据,因此扩展符号位不会改变数值的大小的正负,同时扩展到所需要的位宽。

祝愉快!

杜勇

发布了145 篇原创文章 · 获赞 50 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_37145225/article/details/100110256
Q&A