Module Verilog模块输出寄存器驱动输出寄存器?

Module Verilog模块输出寄存器驱动输出寄存器?,module,output,verilog,quartus,Module,Output,Verilog,Quartus,所以我试图在一个模块中实例化一个模块。根模块具有驱动输出引脚的输出端口,我希望内部模块直接驱动这些端口,但我无法使其正常工作 /* A root module for the 005_135-scanner_mainboard_revA_sch-pcb. Can be used as a test bench for testing peripheral devices but has been designed to be the master root module for the fina

所以我试图在一个模块中实例化一个模块。根模块具有驱动输出引脚的输出端口,我希望内部模块直接驱动这些端口,但我无法使其正常工作

/*
A root module for the 005_135-scanner_mainboard_revA_sch-pcb. Can be used as a test bench for testing peripheral devices but has been designed to be the master root module for the final code.
All IO is included and reset pins on peripheral devices driven active reset with data lines driven to an appropriate value (located in the ‘initial block’).
George Waller. 09/08/15.
*/

module root_module( ft_reset, ft_usb_prsnt, ft_bus_pwrsav, ft_bus_oe,             ft_bus_clkout, ft_bus_siwu, ft_bus_wr, ft_bus_rd, ft_bus_rxf, ft_bus_txe, ft_bus_d,
                        mtr_fault, mtr_config, mtr_m1, mtr_m0, mtr_rst, mtr_out_en, mtr_step, mtr_dir,
                        ccd_driver_oe, ccd_p1, ccd_p2, ccd_cp, ccd_rs, ccd_sh,
                        dac1_sdin, dac1_sclk, dac1_sync, dac2_sdin, dac2_sclk, dac2_sync,
                        adc_pwrdn, adc_encode, adc_d,
                        fpga_reset,
                        clk,
                        gpio,
                        led_ctrl,
                        leds);

//Input declarations
input wire          ft_usb_prsnt, ft_bus_clkout, ft_bus_rxf, ft_bus_txe,
                        mtr_fault, 
                        fpga_reset,
                        clk;

input wire [7:0]    adc_d;

//Output declarations
output reg          ft_reset, ft_bus_pwrsav, ft_bus_oe, ft_bus_siwu, ft_bus_wr, ft_bus_rd,
                        mtr_config, mtr_m1, mtr_m0, mtr_rst, mtr_out_en, mtr_step, mtr_dir,
                        ccd_driver_oe, ccd_p1, ccd_p2, ccd_cp, ccd_rs, ccd_sh,
                        adc_pwrdn, adc_encode,
                        led_ctrl;

output reg          dac1_sdin, dac1_sclk, dac1_sync, dac2_sdin, dac2_sclk, dac2_sync;

output reg [7:0]    leds;

//Input output declarations.
inout reg  [7:0]    ft_bus_d;

inout reg [16:0]    gpio;

//Variables go here     

integer count, count1, state, pixel_n, line_n, t_int;   
integer data[8];

reg en;

//Initial values on start up.
initial
begin
    //IO initial setup values.
    ft_reset = 1; ft_bus_pwrsav = 1; ft_bus_oe = 1; ft_bus_siwu = 0; ft_bus_wr = 1; ft_bus_rd = 1;  //NEED TO APPLY REAL VAULES!!!
    mtr_config = 1; mtr_m1 = 1; mtr_m0 = 1; mtr_rst = 1; mtr_out_en = 1; mtr_step = 0; mtr_dir = 0;
    ccd_driver_oe = 1; ccd_p1 = 0; ccd_p2 = 0; ccd_cp = 0; ccd_rs = 0; ccd_sh = 0;
    dac1_sdin = 0; dac1_sclk = 0; dac1_sync = 0; dac2_sdin = 0; dac2_sclk = 0; dac2_sync = 0;
    adc_pwrdn = 0; adc_encode = 0;
    led_ctrl = 0;
    leds = 0;
    gpio = 0;
    ft_bus_d = 0;

    //Variables setup values.   
    count = 0;
    count1 = 0;
    state = 0;
    pixel_n = 0;
    line_n = 0;
    t_int = 10000;  //t_int = integration time. integration time (seconds) =                  t_int * 10x10^-9. 
end //End initial

//Some other code goes here.
always @(posedge ft_bus_clkout)
begin
    if(count == 50000000)
        begin
            en <= 1;
            count = 0;
        end
        else
        begin
            en <= 0;
            count = count + 1;
    end 
end //End always

AD5601_module AD5601(.en(en), .clk(clk), .data(127),.sdout(dac1_sdin),
.sclk(dac1_sclk), .sync(dac1_sync));    

endmodule   //End module. 
/*
005_135-scanner_主板_revA_sch-pcb的根模块。可以用作测试外围设备的测试台,但被设计为最终代码的主根模块。
所有IO都包括在内,并通过将数据线驱动至适当值(位于“初始块”中)进行主动复位,从而复位外围设备上的引脚。
乔治·沃勒。09/08/15.
*/
模块根模块(ft_复位、ft_usb_prsnt、ft_总线pwrsav、ft_总线oe、ft_总线clkout、ft_总线siwu、ft_总线wr、ft_总线rd、ft_总线rxf、ft_总线txe、ft_总线d、,
mtr_故障、mtr_配置、mtr_m1、mtr_m0、mtr_rst、mtr_out_en、mtr_step、mtr_dir、,
ccd_驱动器_oe、ccd_p1、ccd_p2、ccd_cp、ccd_rs、ccd_sh、,
dac1_sdin,dac1_sclk,dac1_同步,dac2_sdin,dac2_sclk,dac2_同步,
adc_pwrdn,adc_编码,adc_d,
可编程逻辑门阵列(fpga)可编程逻辑门阵列(U)复位,
中华电力有限公司,
gpio,
led_ctrl,
发光二极管);
//输入声明
输入线ft_usb_prsnt、ft_总线clkout、ft_总线rxf、ft_总线txe、,
地铁站故障,
可编程逻辑门阵列(fpga)可编程逻辑门阵列(U)复位,
时钟;
输入线[7:0]adc\U d;
//输出声明
输出寄存器ft_复位,ft_总线pwrsav,ft_总线oe,ft_总线siwu,ft_总线wr,ft_总线rd,
mtr_配置、mtr_m1、mtr_m0、mtr_rst、mtr_out_en、mtr_step、mtr_dir、,
ccd_驱动器_oe、ccd_p1、ccd_p2、ccd_cp、ccd_rs、ccd_sh、,
adc_pwrdn,adc_编码,
led_-ctrl;
输出寄存器dac1_sdin、dac1_sclk、dac1_同步、dac2_sdin、dac2_sclk、dac2_同步;
输出reg[7:0]发光二极管;
//输入输出声明。
inout reg[7:0]英尺/总线d;
inout reg[16:0]gpio;
//变量在这里
整数计数、计数1、状态、像素数、行数、整数;
整数数据[8];
雷根;
//启动时的初始值。
最初的
开始
//IO初始设置值。
ft_reset=1;ft_总线_pwrsav=1;ft_总线_oe=1;ft_bus_siwu=0;ft_总线_wr=1;ft_-bus_-rd=1//需要应用真正的VAULES!!!
mtr_配置=1;mtr_m1=1;mtr_m0=1;mtr_rst=1;mtr\u out\u en=1;mtr_阶跃=0;mtr_dir=0;
ccd_驱动器_oe=1;ccd_p1=0;ccd_p2=0;ccd_cp=0;ccd_rs=0;ccd_sh=0;
dac1_sdin=0;dac1_sclk=0;dac1_sync=0;dac2_sdin=0;dac2_-sclk=0;dac2_sync=0;
adc_pwrdn=0;adc_encode=0;
led_ctrl=0;
发光二极管=0;
gpio=0;
ft_总线d=0;
//变量设置值。
计数=0;
count1=0;
状态=0;
像素n=0;
直线n=0;
t_int=10000//t_int=积分时间。积分时间(秒)=t_int*10x10^-9。
结束//结束首字母
//这里还有其他一些代码。
始终@(posedge ft_bus_clkout)
开始
如果(计数=50000000)
开始

en
inout
端口应为网络类型(
wire
tri
),而不是
reg
)。
reg
没有冲突解决方案(当有两个或多个活动驱动程序时)。不应在程序块中分配
inout
(例如
始终
-block、
初始
-block)。它应该是一个简单的
assign
语句,如下所示。设计人员必须确保IO上的任何点上都只有激活的驱动程序

assign io_port_name = driver_enable ? io_out_value : 'bz; // io_out_value should be a flop
如果在当前模块内的程序块(例如,
始终
-block,
初始
-block)中分配输出,则仅应将其声明为
输出注册表
。所有其他输出应为
输出
输出线
(这些标识符是同义的;前者是隐式的,而后者是显式的)。只能在一个
内分配一个
。FPGA允许
初始
块,ASIC/IC不允许

如果启用了SystemVerilog,则将
输出寄存器
替换为
输出逻辑
<代码>逻辑
可用于触发器和单向网络<代码>逻辑
不建议用于
inout
<代码>逻辑
like
reg
没有冲突解决方案

数组
整数数据[8]
整数pd[2]是SystemVerilog语法,与Verilog不兼容。启用SystemVerilog或更改为
整数数据[0:7]
整数pd[0:1]

通过将文件扩展名从
.v
更改为
.sv
,可以为每个文件启用SystemVerilog;推荐。模拟器/合成器通常有一个开关,强制将所有Verilog视为SystemVerilog;不推荐使用,如果需要,请参阅模拟器/合成器手册。

有多个驱动器的输出
dac1\u sdin
dac1\u sclk
,和
dac1\u sync
。连接到您的内部模块。@Emman您能为我详细说明一下吗?谢谢。正如@toolic所提到的,我认为inout没有任何用处,而且应该删除多个驱动程序。谢谢你的回复。不过,我确实需要inout作为我稍后设计的另一个模块。你能多告诉我一些关于多个司机的情况吗?我理解你的意思是我有多个源驱动信号,但我无法确定我在哪里做的。这些是我得到的错误:错误(10663):根模块处的Verilog HDL端口连接错误。v(87):输出或输入端口“sdout”必须连接到结构网络表达式错误(10663):Verilog HDL端口在根_模块处连接错误。v(87):输出或输入输出端口“sclk”必须连接到结构网络表达式错误(10663):Verilog HDL端口在根_模块处连接错误。v(87):输出或输入输出端口“sync”
assign io_port_name = driver_enable ? io_out_value : 'bz; // io_out_value should be a flop