标签: synthesis

Verilog转移延伸结果?

我们有以下代码行,我们知道它regF是16位长,regDregE8位,长8位,长regC3位,假设无符号:

regF <= regF + ( ( regD << regC ) & { 16{ regE [ regC ]} }) ;
Run Code Online (Sandbox Code Playgroud)

我的问题是:移位是regD << regC假设结果是8位还是会因为&16位向量的按位而扩展到16位?

verilog synthesis hdl flip-flop

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

合成translate_off如何工作?

我有一个具有以下结构的代码

-- synthesis translate_off
... some sort of memory implementation/coding
-- synthesis translate_on
Run Code Online (Sandbox Code Playgroud)

如果删除这段代码会影响我FPGA implementation代码的最终输出,请告诉我.

谢谢,最好的问候,法拉斯

implementation synthesis fpga vhdl

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

如何/ =转换为vhdl中的实际硬件

我是VHDL/FPGA编程的初学者.我想比较两个32位std_logic_vector的.我目前正在使用:

      if ( RX_FRAME(to_integer(s_data_counter)).Data /= REF_FRAME(to_integer(s_data_counter)).Data ) then
        s_bad_frame <= '1';
        state <= DONE;
      end if;
Run Code Online (Sandbox Code Playgroud)

这里RX_FRAMEREF_FRAME是2个的阵列std_logic_vector(31 downto 0)

我想知道综合工具如何转化/=为硬件.是否可以使用它?或者我应该做一个XOR有关的向量并检查结果向量对零?如果我执行XOR并检查零,是否会增加所需的硬件数量?我使用的是Vivado Design Suite 2015.3.

comparison synthesis vhdl hardware-programming vivado

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

这个代码在合成时会产生多少翻转?

我试图了解这段代码在合成时会产生多少翻转?

我有2个带有非阻塞和阻塞分配代码的测试用例.

测试1.

wire aclk; 
wire [1:0] a; 
reg [1:0] c; 
reg [1:0] b;

always @(posedge aclk) 
begin 

 b <= a + 1; 
 c = b; 
end
Run Code Online (Sandbox Code Playgroud)

测试2.

wire aclk; 
wire [1:0] a; 
reg [1:0] c; 
reg [1:0] b;

always @(posedge aclk) 
begin 

 b = a + 1; 
 c <= b; 
end
Run Code Online (Sandbox Code Playgroud)

测试1有4个FF,测试2有2个FF.

我无法理解它是如何改变我只是切换代码.

谢谢你让我知道.

verilog synthesis

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

在仲裁器的 always_ff 块中混合非阻塞和阻塞分配

我无法理解Stuart Sutherland(和他的同事)所著SystemVerilog For Design书中的示例 10-3 。

见第 232 行:

https://code.google.com/p/vak-opensource/source/browse/trunk/hardware/systemverilog/utopia-example/squat.sv?r=185

这是代码片段。我的问题将随之而来。

  bit [0:NumRx-1] RoundRobin;

  always_ff @(posedge clk, posedge reset) begin: FSM
    bit breakVar;
    if (reset) begin: reset_logic
      Rxready <= '1;
      Txvalid <= '0;
      Txsel_out <= '0;
      SquatState <= wait_rx_valid;
      forward <= 0;
      RoundRobin = 1;
    end: reset_logic
    else begin: FSM_sequencer
      unique case (SquatState)

        wait_rx_valid: begin: rx_valid_state
          Rxready <= '1;
          breakVar = 1;
          for (int j=0; j<NumRx; j+=1) begin: loop1
            for (int i=0; i<NumRx; i+=1) begin: loop2 …
Run Code Online (Sandbox Code Playgroud)

synthesis fsm round-robin system-verilog

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

Verilog:在赋值的左侧必须有一个可变数据类型

我在组合分配方面遇到了麻烦.我不明白为什么我不能使用总是组合结构设置我的输出变量.当我使用assign时,我没有得到赋值错误.

我认为分配和总是@(*)都意味着阻止(组合分配)

module control_unit(input wire [31:0] instruction
                   ,output wire RegDst
                   ,output wire ALUSrc
                   ,output wire RegWrite
                   ,output wire MemRead
                   ,output wire MemWrite
                   ,output wire MemToReg
                   ,output wire Branch
                   );

   wire [5:0] opcode;

   assign opcode  = instruction[31:26];

   always@(*) begin
      case(opcode)
            6'b000000: begin              // r-type
               RegDst   = 1'b1;
               ALUSrc   = 1'b0;
               RegWrite = 1'b1;
               MemRead  = 1'b0;
               MemWrite = 1'b0;
               MemToReg = 1'b0;
               Branch   = 1'b0;
            end
           .
           .
           .                    
            default: begin
               RegDst   = 1'b0;
               ALUSrc   = 1'b0;
               RegWrite = 1'b0;
               MemRead …
Run Code Online (Sandbox Code Playgroud)

verilog synthesis variable-assignment quartus

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

在VHDL中使用Verilog模块时的区分大小写

在混合VDHL和Verilog期间,我遇到了区分大小写的问题.

参数"APB_ADDR"以大写形式写入,导线"apb_addr"以小写形式写入.由于Verilog区分大小写,因此两个表达式之间可能不同.

module verilog_module #(
...
parameter APB_ADDR              = 32,
...
) (
...
input   wire    [APB_ADDR-1:0]  apb_addr,
input   wire                    apb_sel,
input   wire                    apb_enable,
input   wire                    apb_write
....
);
Run Code Online (Sandbox Code Playgroud)

现在我想在VDHL中实例化模块:

inst0: entity work.verilog_module 
GENERIC MAP (
    APB_ADDR => APB_ADDR_WIDTH
)
PORT MAP(
    ...
    apb_addr => apb_addr,
    ...
);
Run Code Online (Sandbox Code Playgroud)

合成失败.通用的"apb_addr"不知道.VHDL没有区分大小写.

如何访问通用APB_ADDR?我不想改变用Verilog编写的IP核.

verilog synthesis case-sensitive vhdl case-insensitive

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

VHDL(Xilinx工具链)我被"阵列修整"所打破

我有一个双文件VHDL项目,我有初学者的困难.

它需要系统时钟并使用30位时钟分频器(我只使用少量非连续位)驱动原始串行端口模块(仅输出TX)模块定期吐出8位字符.

似乎在合成过程中,优化器正在删除许多基本信号,这是我没想到的.

顶级文件"Glue.vhd"......

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use ieee.std_logic_unsigned.all;

entity Glue is
    port(
        clk : in std_logic;
        tx  : out std_logic;
        LED : out std_logic_vector(1 downto 0)
        );
end entity Glue;

architecture behavioural of Glue is
    signal divider : unsigned(29 downto 0);
begin
    LED(1) <= '0';

    ser_tx : entity SerialTX
    port map (
            baud_clk => divider(12),
            byte_to_transmit => std_ulogic_vector(divider(29 downto 22)),
            poke => divider(20),
            busy => LED(0),
            serial_out => tx
            );

    clocker : process(clk)
    begin
        IF(rising_edge(clk)) then …
Run Code Online (Sandbox Code Playgroud)

synthesis vhdl compiler-warnings

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

Verilog代码模拟但不像FPGA上预测的那样运行

我对我的代码进行了行为模拟,它运行得很好.结果如预测.当我合成我的代码并将其上传到spartan 3e FPGA并尝试使用chipcope进行分析时,结果甚至不如我预期的那样接近.我做错了什么? http://pastebin.com/XWMekL7r

verilog synthesis fpga hdl xilinx

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

在verilog中实例化模块时传递'generate'语句

我有一段verilog代码,我正在尝试合成.那里有一条线,

MUX2B_XB gas34 ( notPropSig, OECin, generate, notCoutSig );
Run Code Online (Sandbox Code Playgroud)

实例化一个模块.其中,模块实现了一个简单的布尔逻辑.但是,合成器给出了一个错误:

"generate"附近的语法错误.

在实例化时,我无法理解在此上下文中使用'generate'语句,以及如何在不影响预期功能的情况下解决错误.

verilog synthesis hdl system-verilog xilinx

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

在连续赋值中使用 Verilog Case 语句

我正在尝试在 Verilog 中执行从一些灰色代码值到一些二进制值的连续转换。也就是说,我试图在一条总线上获取一个灰色代码值,并不断将其转换为另一条总线上的二进制值。我正在尝试在 Verilog 中执行此操作(由于其他原因无法使用 SystemVerilog)。

我想做这样的事情:

wire [DATA_SIZE - 1:0] binary_snap;
always @(greycode_snap) begin
case (greycode_snap)
    8'b00000000 : binary_snap = 0;
    8'b00000001 : binary_snap = 1;
    8'b00000011 : binary_snap = 2;
    8'b00000111 : binary_snap = 3;
    8'b00001111 : binary_snap = 4;
    8'b00011111 : binary_snap = 5;
    8'b00111111 : binary_snap = 6;
    8'b01111111 : binary_snap = 7;
    8'b11111111 : binary_snap = 8;
    8'b11111110 : binary_snap = 9;
    8'b11111100 : binary_snap = 10;
    8'b11111000 : binary_snap = 11;
    8'b11110000 : binary_snap …
Run Code Online (Sandbox Code Playgroud)

hardware verilog synthesis

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