现在我正在努力实现时钟门控,如下所示。但我不明白为什么以及如何处理 De 信号?
module ClockGating(
input wire rst_n,
input wire clk,
input wire De,
input wire InReg,
output reg OutReg
);
always @( posedge clk or negedge rst_n )
begin
if ( !rst_n ) begin
OutReg <= 0;
end
else begin
if ( De ) begin
OutReg <= InReg;
end
else
OutReg <= OutReg;
end
end
endmodule
Run Code Online (Sandbox Code Playgroud)
但我想知道如果我使用不带 else 语句会发生什么?我可以在没有 else 语句的情况下使用吗?
module ClockGating(
input wire rst_n,
input wire clk,
input wire De,
input wire InReg,
output reg OutReg
); …Run Code Online (Sandbox Code Playgroud) 请看下面的代码:
....
port(
the_input: in std_logic_vector(0 to 3));
...
type dummy_array is array (0 to 2) of std_logic_vector (0 to 7);
signal ins_dummy: dummy_array := ( 8x"1", 8x"2", 8x"3");
...
Run Code Online (Sandbox Code Playgroud)
现在我想使用 bits 访问该数组的元素the_input(0 to 1)。我怎样才能做到这一点?据我所知,数组接受整数作为参数,但此输入是 std_logic。我尝试了不同论坛上提供的许多解决方案,但似乎没有任何效果。例如,当我应用此:时to_integer(unsigned(the_input(0 to 1))),结果为零。
怎么了?我不知道。有什么建议么?
有些问题会导致递归解决方案。Verilog 中可以递归实例化吗?模块是否可以实例化自身?
我是SystemVerilog的新手.
我正在阅读以下教程:
https://www.doulos.com/knowhow/sysverilog/tutorial/interfaces/
我不确定在SystemVerilog界面中modport的优点和动机是什么?
我怎么能用或创建案例?
就像是:
string str;
case (str)
"abc" || "dfg": begin
//some code
end
"yfg": begin
//some code
end
default: //some code
endcase
Run Code Online (Sandbox Code Playgroud) 如果我这样做:
int da [];
...
da = new[2];
...
da = new[1];
Run Code Online (Sandbox Code Playgroud)
我有内存泄漏吗?我应该这样做:
da.delete;
da = new[1];
Run Code Online (Sandbox Code Playgroud)
代替?
使用 VHDL-2019 IEEE 规范部分时。5.2.3.1. 一般的
“但是,实现应允许声明范围完全包含在范围内的任何整数类型 -(2**63) 和 (2**63)-1 包括在内。”
(我添加了指数**)
这是否意味着 –(2**63) = -9223372036854775808 ?
在 1993 年的规范中,它指出 -((2**31) - 1) 和 (2**31) - 1) -2147483647 & 2147483647
新的 VHDL 规范在该定义中是否有错误?
肯
此代码适用于一些工具
但不是其他人
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
ENTITY INSTRUCTION_PROCESSOR IS
PORT (
clk : IN std_logic;
instruction : IN INTEGER
);
END ENTITY INSTRUCTION_PROCESSOR;
ARCHITECTURE behavioural OF INSTRUCTION_PROCESSOR IS
TYPE INSTRUCTION_t IS RECORD
instr : INTEGER;
cycles : INTEGER;
END RECORD;
CONSTANT CMD_A : INSTRUCTION_t := (instr => 0, cycles => 5);
CONSTANT CMD_B : INSTRUCTION_t := (instr => 1, cycles => 3);
BEGIN
PROCESSOR : PROCESS (clk)
VARIABLE loop_cycles : INTEGER := 0;
BEGIN …Run Code Online (Sandbox Code Playgroud) 我试图为以下时间刻度设置打印 $realtime:
`timescale 1ns/10ps
initial begin
#10;
$display(" %0t",$realtime);
$display($realtime);
end
Run Code Online (Sandbox Code Playgroud)
得到打印的结果是:
1000
10
Run Code Online (Sandbox Code Playgroud)
我只是好奇在实时打印中使用格式说明符有什么不同?如果我错了,请纠正我。我相信由于时间精度,它正在打印 1000 (10 *10ps = 1000 ns)。但差异的原因是什么?
你好想知道关联数组如何作为返回值传递
代码:
function abc()
begin
int value[string][string];
value = def();
end
function int def()
begin
int new_value[string][string];
//logic to populate the array
return new_value;
end
Run Code Online (Sandbox Code Playgroud)
我看到以下错误:目标的类型是 int。而source的类型是int$[string][string]。
如何处理这个问题并无缝地传递关联数组?
我不明白这个错误是什么意思。我想制作一个带有内存的简单计算器,但是这个错误跳出来了,我无法得到什么
** 错误:C:\Users\Kainy\Desktop\LOGIC\calculator\cal.v(14):输入、输出或输入输出未出现在端口列表:f1 中。** 错误:C:\Users\Kainy\Desktop\LOGIC\calculator\cal.v(15):输入、输出或输入输出未出现在端口列表中:f2。
方法。好像我的f1,f2有一些无效的东西,我该如何修复它?
module cal( a,b,c,op,clk,reset,en,r_w);
input [3:0] a;
input [3:0] b;
input [7:0] c;
input [2:0] op;
input clk;
input reset;
input en;
input r_w;
output reg [7:0] f1;
output reg [7:0] f2;
wire [7:0] f3;
always@(a or b or op) begin
case(op)
3'b000: begin
f1 = a;
f3 = f1;
end
3'b001: begin
f1 = b;
f3 = f1;
end
3'b010: begin
f1 = a+b;
f3 = f1;
end
3'b011: begin
f1 = a - …Run Code Online (Sandbox Code Playgroud) 在verilog代码中仅给出1和给出1'b1有什么区别?