关于verilog的几个小问题

时间:2022-11-27 17:34:17
各位兄弟姐妹大家好,小弟这两天正在苦心学习verilog,书中看到一段话不太明白:
简单的十进制数格式的整数代表一个有符号的数,负数可使用两种补码形式表示。因此32在5位的二进制形式中为10000,在6位二进制形式中为110001;-15在5位的二进制形式中为10001,在6位二进制形式中为110001。
请问第一个110001是不是错了?如果错了,那应该是什么?
第二个110001是直接在10001之前补1得来的么?



另外还有一个问题,书中有这么一例:
//带6个隐含寄存器的电路
module count(clock,reset,and_bits,or_bits,xor_bits);
input clock,reset;
output and_bits,or_bits,xor_bits;
reg and_bits,or_bits,xor_bits;
reg [2:0] count;
always @(posedge clock)begin
if(reset)
count=0;
else
count=count+1;
and_bits=&count;
or_bits=|count;
xor_bits=^count;
end
endmodule
书上说在这个例子里共用了6个触发器,其中3个保存count的值,其他的分别保存and_bits,or_bits和xor_bits的值。
小弟不才,不知触发器是什么,请大哥大姐们指点指点。谢谢。

9 个解决方案

#1


该回复于2010-02-23 09:42:58被版主删除

#2


关于触发器,建议先好好学学数字电路,这个一两句话很难说清的

#3


reg and_bits,or_bits,xor_bits; 
reg [2:0] count; //reg定义寄存器变量,Verilog看起来依旧那么亲切

#4


Verilog编程时脑子里一定要有时钟跳变的概念

#5


个人认为:32在5位二进制中表示为00000,无法表示,因为除去符号位,剩下4位,表示不了32这么大的数。只能最多表示15。
-15在5位二进制中可以表示, 补码就是符号位为1,其他各位 "逐位求反,末位加1",所以是正确的

11111→10000→10001
101111→110000→110001 
后面俩是正确的

#6


楼上正确,-15的补码 就是 10001
最高位是符号位,负数的符号位是1
原码:11111 -》 反码 10000 -》 补码 10001

#7


触发器,是一种存储器件。它是靠上升沿和下降沿触发的。触发就是将改变或还是保持原状态。

#8


reg [2:0] count;//使用了三个触发器



and_bits=&count;/*每行
or_bits=|count;   代码
xor_bits=^count;  使用一个触发器*/

#9


第一个110001错了应是110000

#1


该回复于2010-02-23 09:42:58被版主删除

#2


关于触发器,建议先好好学学数字电路,这个一两句话很难说清的

#3


reg and_bits,or_bits,xor_bits; 
reg [2:0] count; //reg定义寄存器变量,Verilog看起来依旧那么亲切

#4


Verilog编程时脑子里一定要有时钟跳变的概念

#5


个人认为:32在5位二进制中表示为00000,无法表示,因为除去符号位,剩下4位,表示不了32这么大的数。只能最多表示15。
-15在5位二进制中可以表示, 补码就是符号位为1,其他各位 "逐位求反,末位加1",所以是正确的

11111→10000→10001
101111→110000→110001 
后面俩是正确的

#6


楼上正确,-15的补码 就是 10001
最高位是符号位,负数的符号位是1
原码:11111 -》 反码 10000 -》 补码 10001

#7


触发器,是一种存储器件。它是靠上升沿和下降沿触发的。触发就是将改变或还是保持原状态。

#8


reg [2:0] count;//使用了三个触发器



and_bits=&count;/*每行
or_bits=|count;   代码
xor_bits=^count;  使用一个触发器*/

#9


第一个110001错了应是110000