标签: verilog

我无法理解以下verilog代码

我无法理解这段代码末尾的两行

input [15:0] offset ;
output [31:0] pc;
output [31:0] pc_plus_4;
reg [31:0] pc;
wire [31:0] pcinc ;

assign pcinc = pc +4 ;
assign pc_plus_4 = {pc[31],pcinc};

assign branch_aadr = {0,pcinc + {{13{offset[15]}},offset[15:0],2'b00}};
Run Code Online (Sandbox Code Playgroud)

verilog computer-architecture

0
推荐指数
2
解决办法
624
查看次数

当状态太多时如何构建FSM?

正如我从其他例子中看到的那样,我正在研究自动售货机项目并尝试构建状态机.我正在尝试建造的机器可以支付高达100美元的费用.它需要镍,硬币和四分之一.所以,我应该逐个定义大约2000个州.如何以更简单的方式构建FSM?我只是想要一个建议继续下去.

谢谢 :)

verilog fsm

0
推荐指数
1
解决办法
357
查看次数

Verilog错误:在连续分配的左侧,注册是非法的

我是一个verilog noob,我必须为处理器做这个ALU,但我得到这个错误:

分配SP_out = SP;

"在连续分配的左侧登记是非法的"

我正在使用modelsim.

module ALU(opcode,ra,rb,ra_out,cin,co,res,rst,clk,pc,npc,CCRin,CCRo,SP,SP_out);
  output [1:0] res; // result 
  input wire [7:0]pc;
  output reg [7:0] npc;
  input rst,clk;
  input wire cin;
  input wire [3:0] opcode;
  input wire[1:0] ra;
  input wire[1:0] rb;
  output reg[1:0] ra_out;
  input wire[7:0] SP; // testbench haygebli SP el mafroud yeb2a = 255
  output reg[7:0] SP_out;

  reg[255:0] dmem;

  input wire [3:0] CCRin;
  output reg [3:0] CCRo;
  output co;

  wire [2:0] result; //total result

  assign SP_out = SP;

  assign result = alu_out(ra,rb,cin); 
  assign …
Run Code Online (Sandbox Code Playgroud)

verilog

0
推荐指数
1
解决办法
2万
查看次数

记分牌和检查器之间的区别

我已经开始为我的RTL DUT开发一个测试平台.使用测试平台的所有组件,我想实现自检机制来验证DUT的功能.

因此,我需要开发记分板组件.但在这里,我甚至得到了检查器组件的概念.

ScoreboardChecker组件有什么区别?

还有它的应用?

什么时候需要使用记分牌检查两者兼而有之

谢谢.

verification verilog register-transfer-level system-verilog uvm

0
推荐指数
1
解决办法
1万
查看次数

为什么我的设计由Quartus II成功编译但没有逻辑利用?

对不起这样的一般性问题.我有Verilog的经验,但对FPGA和Quartus II不熟悉.我使用Quartus II来尝试编译设计并查看设计使用了多少逻辑.我按照Altera的Quartus II快速教程进行了操作.http://www.altera.com/literature/manual/mnl_qts_quick_start.pdf

然而,在分析和综合步骤之后,我注意到根本没有逻辑利用.只能看到顶部模块的两个输入引脚.

在此输入图像描述

我设计的顶层模块是

RiSC(clk,reset)
Run Code Online (Sandbox Code Playgroud)

当然,在编译之后,仍然只有两个引脚.

在此输入图像描述

你有没有遇到过这个问题?你能给我一些提示吗?该设计包含数百行verilog代码,因此应该有逻辑利用率.

谢谢!

verilog compilation fpga

0
推荐指数
1
解决办法
2149
查看次数

缓冲区的非阻塞或阻止分配?

我试图在Verilog中实现一个小行缓冲区.我从一端放入数据并从另一端读取数据.

wire [29:0] temp_pixel;
reg  [29:0] temp_buffer[2:0];
Run Code Online (Sandbox Code Playgroud)

我可以使用像这样的阻塞分配语句,它应该按预期工作.

always @(posedge TD_CLK27)
begin
temp_buffer[0] = temp_buffer[1];
temp_buffer[1] = temp_buffer[2];
temp_buffer[2] = temp_pixel;
end
Run Code Online (Sandbox Code Playgroud)

但是,我可以使用非阻塞语句(如下所示)并仍能获得预期结果吗?或者temp_buffer [1]在被读入temp_buffer [0]之前会被temp_buffer [2]覆盖?

always @(posedge TD_CLK27)
begin
temp_buffer[0] <= temp_buffer[1];
temp_buffer[1] <= temp_buffer[2];
temp_buffer[2] <= temp_pixel;
end
Run Code Online (Sandbox Code Playgroud)

这两个块是否都相同,或强制必须阻止赋值语句,为什么?

buffer verilog fpga fifo

0
推荐指数
1
解决办法
4304
查看次数

SystemVerilog Verilog中的unarray移位运算符?

我在SystemVerilog sim中遇到了这一行,我已经google了一下,但我不确定它在做什么:

data_w = { >> 32 { { >> { data } } } };
Run Code Online (Sandbox Code Playgroud)

任何澄清将非常感谢!谢谢!

verilog system-verilog

0
推荐指数
1
解决办法
316
查看次数

在verilog中左移一个数字,只保留高位

我在verilog中有以下电汇:

wire [15:0] mywire;
wire [7:0] mywire_shifted
wire [4:0] shiftamount;
Run Code Online (Sandbox Code Playgroud)

我想将mywire左移一些,但只保留高8位:

assign mywire_shifted = (mywire << shiftamount) >> 8;
Run Code Online (Sandbox Code Playgroud)

有更清洁的方法吗?

也许是这样的:

assign {mywire_shifted,8'0} = mywire << shiftamount;
Run Code Online (Sandbox Code Playgroud)

hardware verilog hdl register-transfer-level

0
推荐指数
1
解决办法
384
查看次数

始终在零时刻阻止执行

我想在零时刻执行总是阻塞.例如,下面的代码将不会在零时执行.

always @* begin
//functional code
end
Run Code Online (Sandbox Code Playgroud)

我在最后移动了敏感度列表,以便代码将在零时执行,

always begin
//funcitonal code
@*;
end
Run Code Online (Sandbox Code Playgroud)

此代码在零时执行,但在零时间之后根本不执行,即使块内使用的输入发生了变化.例如,请参阅下面的代码及其输出:

module AlwaysTimeZeroTest_v();

reg reg_A;

initial begin
  $display ("I'm in Initial begin block       \tTime=%f, reg_A=%b\n",$stime,reg_A);
  #1
  reg_A=1'bZ;

  #1
  reg_A=1'b1;

  #1
  reg_A=1'b0;

  #1
  reg_A=1'bZ;

  #5 $finish;
end

always @* begin
    $display ("I'm in Non-time Zero always block\tTime=%f, reg_A=%b\n",$stime,reg_A);
end

always begin
   $display ("I'm in time Zero always block     \tTime=%f, reg_A=%b\n",$stime,reg_A);
    @*;
end

endmodule
Run Code Online (Sandbox Code Playgroud)

输出:

**I'm in Initial begin block              Time=0.000000, reg_A=x

I'm in time Zero always block …
Run Code Online (Sandbox Code Playgroud)

verilog system-verilog

0
推荐指数
1
解决办法
734
查看次数

分配中非运算符的意外结果

我有两个8位输入AB

input [7:0] A,B;
Run Code Online (Sandbox Code Playgroud)

和一个9位的输出F

output reg [8:0] F;
Run Code Online (Sandbox Code Playgroud)

A并被B组合并分配为F

F <= ~(A^B);
Run Code Online (Sandbox Code Playgroud)

如果A等于8'hFF,并且B等于8'hF0,为什么F变得9'h1F09'h0F0

verilog

0
推荐指数
1
解决办法
39
查看次数