verilog的这个赋值语句是什么意思

reg[7:0]q=8‘b10000000;这个八位的q赋值后q[0]q
[1]......q[7]是什么

always@(posedge clk)
begin q[7:0]<={q[0],q[7:1]};这条语句赋值后那八位的q又是什么
end

reg [7:0] q=8‘b10000000;
右边是最低位,q[0]~q[6]为0,q[7]为1
q[7:0]<={q[0],q[7:1]}相当于一个循环右移操作,将q[0]的值赋给q[7],q[7]~q[1]依次向右移位一位。根据前值8‘b10000000,第一个时钟周期后变为8‘b01000000;第二个时钟周期后变为8‘b00100000;类推。第八个时钟周期后又回到q=8‘b10000000追问

q[7:0]<={q[0],q[7:1]}这个右移是怎么移的,哪里看出来是q[0]的值赋给q[7];{q[0],q[7:1]}是不是可以看成{q[0],q[7],q[6],q[5],q[4],q[3],q[2],q[1]},那q[7:0]<={.....}是什么意思

追答

没错,就是那么看。这个问题的核心在于你要理解{}这个运算符,这个运算符叫做并置运算符,把大括号里的信号按次序合起来赋值给左边的变量

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-11
第一个:q[7]=1'b1;其它都是0
第二个:循环右移位
第2个回答  2011-12-11
这条语句的功能是 循环
相似回答