123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>CodeMirror: Verilog mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="verilog.js"></script>
- <link rel="stylesheet" href="../../doc/docs.css">
- <style>.CodeMirror {border: 2px inset #dee;}</style>
- </head>
- <body>
- <h1>CodeMirror: Verilog mode</h1>
- <form><textarea id="code" name="code">
- /* Verilog demo code */
- module butterfly
- #(
- parameter WIDTH = 32,
- parameter MWIDTH = 1
- )
- (
- input wire clk,
- input wire rst_n,
- // m_in contains data that passes through this block with no change.
- input wire [MWIDTH-1:0] m_in,
- // The twiddle factor.
- input wire signed [WIDTH-1:0] w,
- // XA
- input wire signed [WIDTH-1:0] xa,
- // XB
- input wire signed [WIDTH-1:0] xb,
- // Set to 1 when new data is present on inputs.
- input wire x_nd,
- // delayed version of m_in.
- output reg [MWIDTH-1:0] m_out,
- // YA = XA + W*XB
- // YB = XA - W*XB
- output wire signed [WIDTH-1:0] ya,
- output wire signed [WIDTH-1:0] yb,
- output reg y_nd,
- output reg error
- );
- // Set wire to the real and imag parts for convenience.
- wire signed [WIDTH/2-1:0] xa_re;
- wire signed [WIDTH/2-1:0] xa_im;
- assign xa_re = xa[WIDTH-1:WIDTH/2];
- assign xa_im = xa[WIDTH/2-1:0];
- wire signed [WIDTH/2-1: 0] ya_re;
- wire signed [WIDTH/2-1: 0] ya_im;
- assign ya = {ya_re, ya_im};
- wire signed [WIDTH/2-1: 0] yb_re;
- wire signed [WIDTH/2-1: 0] yb_im;
- assign yb = {yb_re, yb_im};
- // Delayed stuff.
- reg signed [WIDTH/2-1:0] xa_re_z;
- reg signed [WIDTH/2-1:0] xa_im_z;
- // Output of multiplier
- wire signed [WIDTH-1:0] xbw;
- wire signed [WIDTH/2-1:0] xbw_re;
- wire signed [WIDTH/2-1:0] xbw_im;
- assign xbw_re = xbw[WIDTH-1:WIDTH/2];
- assign xbw_im = xbw[WIDTH/2-1:0];
- // Do summing
- // I don't think we should get overflow here because of the
- // size of the twiddle factors.
- // If we do testing should catch it.
- assign ya_re = xa_re_z + xbw_re;
- assign ya_im = xa_im_z + xbw_im;
- assign yb_re = xa_re_z - xbw_re;
- assign yb_im = xa_im_z - xbw_im;
-
- // Create the multiply module.
- multiply_complex #(WIDTH) multiply_complex_0
- (.clk(clk),
- .rst_n(rst_n),
- .x(xb),
- .y(w),
- .z(xbw)
- );
- always @ (posedge clk)
- begin
- if (!rst_n)
- begin
- y_nd <= 1'b0;
- error <= 1'b0;
- end
- else
- begin
- // Set delay for x_nd_old and m.
- y_nd <= x_nd;
- m_out <= m_in;
- if (x_nd)
- begin
- xa_re_z <= xa_re/2;
- xa_im_z <= xa_im/2;
- end
- end
- end
-
- endmodule
- </textarea></form>
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
- lineNumbers: true,
- mode: "text/x-verilog"
- });
- </script>
- <p>Simple mode that tries to handle Verilog-like languages as well as it
- can. Takes one configuration parameters: <code>keywords</code>, an
- object whose property names are the keywords in the language.</p>
- <p><strong>MIME types defined:</strong> <code>text/x-verilog</code> (Verilog code).</p>
- </body>
- </html>
|