理解verilog中的代码片段

时间:2014-03-05 09:57:21

标签: aes verilog

我在AES的verilog代码中找到了以下代码片段。

function [7:0] xtime;
input [7:0] b; xtime={b[6:0],1'b0}^(8'h1b&{8{b[7]}});
endfunction

请解释一下这是做什么的。更精细的解释越好。

2 个答案:

答案 0 :(得分:1)

b是8位输入。

b [6:0],1'b0最后7位左移,并用0

填充

^ xor

8'h1b 8位hex 1b带有符号位。

在一行中解释:如果将msb设置为xor,则为0x1b,否则为* 2

快速搜索xtime和AES会让我看到这个c实现的评论:

// xtime is a macro that finds the product of {02} and the argument to
// xtime modulo {1b}  
#define xtime(x)   ((x<<1) ^ (((x>>7) & 1) * 0x11b))

看起来它可能正在做同样的事情。

答案 1 :(得分:1)

让我们清理代码并细分一些任务:

function [7:0] xtime;
  input [7:0] b; 
  reg   [7:0] temp1;
  reg   [7:0] temp2;
  begin
    temp1  = {b[6:0],1'b0};
    temp2  = ( 8'h1b & {8{b[7]}} ); 
    xtime  = temp1 ^ temp2;
  end
endfunction

名为xtime的函数输出变量xtime 8位宽。具有8位宽输入,称为b。

temp1左移输入b,填充LSB(最低有效位)为0并丢弃MSB(最高有效位)。

temp2按位AND s 8'h1B(8'b0001_1011),输入b的MSB。

b[7]选择b的第7位 {8{value}}是复制运算符。

{8{1'b1}}  => 8'b1111_1111
{4{2'b10}} => 8'b1010_1010

xtime执行XORtemp1的按位temp2