简单的verilog来控制MD1715超声波驱动器

Simple verilog to control MD1715 ultrasound driver

我正在尝试控制 TC8020 mosfet (http://ww1.microchip.com/downloads/en/DeviceDoc/tc8020.pdf) through a md1715 ultrasound driver (http://ww1.microchip.com/downloads/en/DeviceDoc/md1715.pdf) 以最终控制超声波传感器。

即FPGA --> MD1715 --> TC8020 --> 发送器

从我在 md1715 真值表(md1715.pdf 第 4 页)中可以看出,我应该能够通过类似 SEL=1、POS=1、NEG=0 的方式驱动输出电压?

我正尝试在我的 verilog 代码中做类似的事情,但我已经有很长时间没有使用 HDL 了。这样的事情有意义吗?我不确定如何更改频率等

module main(input ADC0CLK, 
                output SELA, //pin mappings set up to fpga
                output POSA,
                output NEGA
    );

reg r_sel_a;
reg r_pos_a;
reg r_neg_a;

/*
// Hardwire for now just to test output. 
// From what I can tell this should drive a constant voltage of 1?
assign SELA = 1'b1;
assign POSA = 1'b1;
assign NEGA = 0;
*/

assign SELA = r_sel_a;
assign POSA = r_pos_a;
assign NEGA = r_neg_a;

always @ (posedge ADC0CLK or negedge ADC0CLK)
begin: TRANSMITA
    if (ADC0CLK == 1) begin
        r_sel_a <= 1'b1;
        r_pos_a <= 1'b1;
        r_neg_a <= 0;
    end else if (ADC0CLK == 0) begin
        r_sel_a <= 1'b1;
        r_pos_a <= 0;
        r_neg_a <= 1'b1;
    end
end

endmodule

非常感谢

此代码不可合成。你不能有一个进程(总是)在时钟的两个边缘上工作。我在这里看到两个选项:

  1. 您可以使用快 2 倍的时钟,然后您的进程将仅在这个更快的时钟的 posedge 上运行。

  2. 您可以使用 ODDR 原语。 ODDR 是用于在两个时钟边沿上驱动数据的赛灵思原语,here 您可以找到赛灵思 7 系列 IO 资源的描述。如果您使用其他供应商的 FPGA,那么您必须搜索这样的原语,我发现 altera 有 ALTDDIO_OUT ipcore,但我从未使用过它。

Imo 选项 2 更好,您应该不会出现在第一个选项中可能出现的计时问题。