init=
答案 0 :(得分:2)
我可以在多个always块中使用变量计数吗?
不在RTL代码中。
这是一个很好的设计实践吗?
“良好的设计实践”并不是一个定义明确的术语。您可以在测试平台中使用它,但不能使用您使用的格式。在这种情况下,您必须确保所有始终条件都是互斥的。
为什么/应该/不应该使用此方法?
如果您有大约10年的代码编写经验,可以使用它。否则不要。至于“应该”永远不会!
模拟器/合成器如何对该变量'count'进行计算?
合成器将拒绝您的代码。模拟器将按照您的描述分配值。在你的代码中意味着:你不知道最后执行了哪个赋值,因此结果是不可预测的。
如果我这样做,编译器会抛出错误吗?
为什么询问你是否可以尝试?
答案 1 :(得分:0)
我不是硬件设计师,但这并不好。您的3个count
块将全部推断出一个寄存器,它们将全部驱动posedge
信号。
你可以在多个块中读取信号,但是你应该只在一个块中写入它们。
在大多数情况下,您不想拥有多个驱动程序。如果您有类似总线的多个可能的主机,那么您将需要多个驱动程序,但是它们需要通过三态驱动总线,并且您需要确保主机具有独占访问权。
混合negedge
和always @(posedge clk or negedge reset_n)
begin
if (reset_n == 1'b0)
begin
count <= 32'b0;
end
else
begin
case (count_control)
UP1: count <= count + 1'b1;
DOWN2: count <= count - 2'b10;
DOWN1: count <= count - 1'b1;
endcase
end
end
不是一个好主意。
使用单个块,您可以编写类似这样的内容(适用于UP1,DOWN1和DOWN2的宏或参数)。
=
答案 2 :(得分:0)
没有。您无法从多个始终阻止的网络分配网络。
以下是Synopsys Design Compiler中的2实现的综合结果
从多个总是阻止的分配。
module temp(clk, rst, x, y, op);
input logic clk, rst;
logic [1:0] count;
input logic x, y;
output logic [1:0] op;
assign op = count;
always @ (posedge clk) begin
if (x) begin
count <= count + 2'd1;
end
end
always @ (posedge clk) begin
if (y) begin
count <= count - 2'd2;
end
end
always @ (negedge clk) begin
if (x) begin
count <= count - 2'd1;
end
end
endmodule
// Synthesis Result of elaborate command -
Error: /afs/asu.edu/users/k/m/s/kmshah4/temp/a.sv:16: Net 'count[1]' or a directly connected net is driven by more than one source, and not all drivers are three-state. (ELAB-366)
Error: /afs/asu.edu/users/k/m/s/kmshah4/temp/a.sv:16: Net 'count[0]' or a directly connected net is driven by more than one source, and not all drivers are three-state. (ELAB-366)
总是单独分配。
module temp(clk, rst, x, y, op);
input logic clk, rst;
logic [1:0] count;
input logic x, y;
output logic [1:0] op;
assign op = count;
always @ (clk)
begin
if (clk)
begin
case ({x, y})
2'b01 : count <= count - 2'd2;
2'b10 : count <= count + 2'd1;
default : count <= count;
endcase
end
else
begin
count <= (x) ? (count - 2'd1) : count;
end
end
endmodule
// Synthesis Result of elaborate command -
Elaborated 1 design.
Current design is now 'temp'.
1