我想计算一个素数的计算模拟时间.这意味着没有时钟周期来计算一个素数.我们也知道,一个大质数比一个小素数得到更多的时钟周期来计算.每当计算一个素数并在time_s寄存器中捕获它时,我在verilog中使用$ time.我计算了另一个素数后的计算差异.在这里我可以看到time_s1捕获了计算素数时的时间.Time_s2是计算差异的时间.
module prime_number_count(
input clk
);
//for count 1
parameter N =100; // size of array
parameter N_bits = 32;
reg [N_bits-1:0] prime_number[0:N-1]; // memory array for prime_number
reg [N_bits-1:0] prime_aftr50 [0:49]; // memory array to get
integer k; // counter variable
integer k1; // counter variable
integer count;
integer test;
integer time_s1;
integer time_s2;
integer check; //Counts 1 to k
localparam S_INC = 2'b01;
localparam S_CHECK = 2'b10;
reg [1:0] state;
initial begin
prime_number[0] = 'd1;
prime_number[1] = …Run Code Online (Sandbox Code Playgroud) 例如,具有C99标准的C编程语言支持十六进制浮点文字,但C++与C++ 03标准不支持.
我对它进行了测试,GCC在C++ 03模式下识别了十六进制浮动文字(-std = c ++ 03),但根据C++标准,它不应该.我知道,这不是一个悲剧,我只是对这个问题感兴趣..
GCC编制器是否符合标准?你能推荐我一个符合标准"完美"的C/C++编译器吗?
如果我在VHDL过程中编写语句来指定a为+ 1,这是一个好习惯吗?
我对此感到困惑,因为模拟器工作正常,但当我尝试在FPGA中实现它时,综合工具抱怨创建锁存器.
这是什么意思?
我有一个模块:
module abc(
input in1,
input in2,
output in3
);
Run Code Online (Sandbox Code Playgroud)
在另一个主模块中实例化该模块:
abc name_abc(in1, in2, out);
Run Code Online (Sandbox Code Playgroud)
现在in1基于其他一些信号而改变.根据我的理解,实例化会创建一个逻辑块,现在我想使用已经创建但具有不同输入或更新输入的块.有没有办法在verilog中这样做?
我想做的是:
abc name_abc(in1_updated, in2, out);
Run Code Online (Sandbox Code Playgroud) 在 verilog 中,我有一个二进制值数组。如何取减去值的绝对值?
Verilog 代码:
module aaa(clk);
input clk;
reg [7:0] a [1:9];
reg [7:0] s [1:9];
always@(posedge clk)
begin
s[1] = a[1] - a[2];
s[2] = a[2] - a[3];
s[3] = a[1] + a[3];
end
endmodule
Run Code Online (Sandbox Code Playgroud)
我想我s[1]和s[2]值总是正的。我怎样才能在可综合的 verilog 中做到这一点?
我试过使用signed reg,但它显示一个错误。
我在 verilog 中的 for 循环语句有一些问题。
reg [31:0] i;
initial begin
for (i=2; i > 0; i = i - 1) begin
$display ("%d\n", i);
end
end
Run Code Online (Sandbox Code Playgroud)
这段代码运行没有任何问题,但是如果我将中间条件更改为 i >= 0,则程序会重复运行而不会停止。
我不明白为什么会这样!
PS:完整代码可以在这里找到:http : //pastebin.com/3LX0Mkg0
我正在Verilog设计一个加法器.它将有两个大小为N和两个输出的输入.第一个输出的大小为2N,第二个的大小为K.
这是我到目前为止:
module adder(
out,
CCR,
inA,
inB
);
parameter N=8,CCR_size=8;
parameter M=2*N;
input [N-1:0] inA,inB;
output [M-1:0] out;
output [CCR_size-1:0] CCR;
reg [N:0] temp;
always @(inA or inB)
begin
temp = inA+inB;
CCR[0] = temp[N];
out[N-1:0]= temp[N-1:0];
out[M-1:N]= 'b0;
end
endmodule
Run Code Online (Sandbox Code Playgroud)
从评论中移出: 但是这没有编译.我有错误
CCR[0],out[N-1:0] and out[M-1:N]
# Error: VCP2858 adder.v : (16, 20): CCR[0] is not a valid left-hand side of a procedural assignment.
# Error: VCP2858 adder.v : (17, 28): out[N-1:0] is not a valid left-hand side of …Run Code Online (Sandbox Code Playgroud) 我试图生成 128 个并行异或门,然后将它们的输出连接到 Verilog 中的 64 个异或门。我使用一个名为“EXOR”的模块。我的问题是:当我将此模块“EXOR”放入循环中时,程序给出语法错误“意外标记:'EXOR'”。我想将门命名为 exor0、exor1、...。
我该如何解决?
initial begin
for (i=0; i<128 ; i=i +1 )
EXOR exor[i](.I1(m[2*i]), .I2(m[2*i+1]), .o(t[i]));
end
initial begin
for (i=0; i<64 ; i=i +1 )
EXOR exor[i+128](.I1(t[2*i]), .I2(t[2*i+1]), .o(f[i]));
end
initial begin
for (i=0; i<32 ; i=i +1 )
EXOR exor[i+192](.I1(f[2*i]), .I2(f[2*i+1]), .o(g[i]));
end
Run Code Online (Sandbox Code Playgroud) module circuit_1 (a, b, c);
input [1:0J a,b;
output [3:0J c;
assign c = a + b;
Run Code Online (Sandbox Code Playgroud)
如果输入 a = 2'b11 并且输入 b = 2'b10,
输出 c 有什么值?请给出一个描述性的答案。
还请告诉我分配和始终的功能。我有点困惑。
我想知道verilog和汇编语言之间的区别.
下学期我们将使用微控制器,但我想在学期开始前学习一点.我一直在做很多关于低级编程的研究,到目前为止我已经在汇编语言方面有了很好的理解,但是我很难理解Verilog和VHDL?