1
0
mirror of https://github.com/aolofsson/oh.git synced 2025-01-30 02:32:53 +08:00
oh/common/hdl/oh_oddr.v

48 lines
1.2 KiB
Coq
Raw Normal View History

2016-02-23 15:42:32 -05:00
//##################################################################
//# ***DUAL DATA RATE OUTPUT***
//#
//# * Equivalent to "SAME_EDGE" for xilinx
//# * din1/din2 presented together on rising edge of clk
//# * din1 follows rising edge
//# * din2 follows falling edge
//##################################################################
2016-02-22 23:47:27 -05:00
module oh_oddr (/*AUTOARG*/
// Outputs
out,
// Inputs
clk, ce, din1, din2
);
2016-02-23 15:42:32 -05:00
2016-02-22 23:47:27 -05:00
//parameters
parameter DW = 32;
//signals
input clk; // clock input
input ce; // clock enable input
input [DW-1:0] din1; // data input1
input [DW-1:0] din2; // data input2
output [DW-1:0] out; // ddr output
2016-02-23 15:42:32 -05:00
//regs("sl"=stable low, "sh"=stable high)
reg [DW-1:0] q1_sl;
reg [DW-1:0] q2_sl;
reg [DW-1:0] q2_sh;
2016-02-22 23:47:27 -05:00
//Generate different logic based on parameters
always @ (posedge clk)
2016-02-23 15:42:32 -05:00
begin
q1_sl[DW-1:0] <= #(0.1) din1[DW-1:0];
q2_sl[DW-1:0] <= #(0.1) din2[DW-1:0];
end
2016-02-22 23:47:27 -05:00
always @ (negedge clk)
2016-02-23 15:42:32 -05:00
q2_sh[DW-1:0] <= #(0.1) q2_sl[DW-1:0];
2016-02-22 23:47:27 -05:00
2016-02-23 15:42:32 -05:00
assign out[DW-1:0] = clk ? q1_sl[DW-1:0] :
q2_sh[DW-1:0];
2016-02-22 23:47:27 -05:00
endmodule // oh_oddr