aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs/intel/cycloneive/cells_map.v
blob: abeb92eefef4c5ea9bb2a5efe6f31179ba24ff4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
 *  yosys -- Yosys Open SYnthesis Suite
 *
 *  Copyright (C) 2012  Clifford Wolf <clifford@clifford.at>
 *
 *  Permission to use, copy, modify, and/or distribute this software for any
 *  purpose with or without fee is hereby granted, provided that the above
 *  copyright notice and this permission notice appear in all copies.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 */
// > c60k28 (Viacheslav, VT) [at] yandex [dot] com
// > Intel FPGA technology mapping. User must first simulate the generated \
// > netlist before going to test it on board.
// > Changelog: 1) The missing power_up parameter in the techmap introduces a problem in Quartus mapper. Fixed.

// Normal mode DFF negedge clk, negedge reset
module  \$_DFF_N_ (input D, C, output Q);
   parameter WYSIWYG="TRUE";
   parameter power_up=1'bx;
   dffeas #(.is_wysiwyg(WYSIWYG), .power_up(power_up)) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .clrn(1'b1), .prn(1'b1), .ena(1'b1), .asdata(1'b0), .aload(1'b0), .sclr(1'b0), .sload(1'b0));
endmodule
// Normal mode DFF
module  \$_DFF_P_ (input D, C, output Q);
   parameter WYSIWYG="TRUE";
   parameter power_up=1'bx;
   dffeas #(.is_wysiwyg(WYSIWYG), .power_up(power_up)) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .clrn(1'b1), .prn(1'b1), .ena(1'b1), .asdata(1'b0), .aload(1'b0), .sclr(1'b0), .sload(1'b0));
endmodule

// Async Active Low Reset DFF
module  \$_DFF_PN0_ (input D, C, R, output Q);
   parameter WYSIWYG="TRUE";
   parameter power_up=1'bx;
   dffeas #(.is_wysiwyg(WYSIWYG), .power_up("power_up")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .clrn(R), .prn(1'b1), .ena(1'b1), .asdata(1'b0), .aload(1'b0), .sclr(1'b0), .sload(1'b0));
endmodule
// Async Active High Reset DFF
module  \$_DFF_PP0_ (input D, C, R, output Q);
   parameter WYSIWYG="TRUE";
   parameter power_up=1'bx;
   wire R_i = ~ R;
   dffeas #(.is_wysiwyg(WYSIWYG), .power_up(power_up)) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .clrn(R_i), .prn(1'b1), .ena(1'b1), .asdata(1'b0), .aload(1'b0), .sclr(1'b0), .sload(1'b0));
endmodule

module  \$__DFFE_PP0 (input D, C, E, R, output Q);
   parameter WYSIWYG="TRUE";
   parameter power_up=1'bx;
   wire E_i = ~ E;
   dffeas #(.is_wysiwyg(WYSIWYG), .power_up(power_up)) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .clrn(R), .prn(1'b1), .ena(1'b1), .asdata(1'b0), .aload(1'b0), .sclr(E_i), .sload(1'b0));
endmodule

// Input buffer map
module \$__inpad (input I, output O);
   cycloneive_io_ibuf _TECHMAP_REPLACE_ (.o(O), .i(I), .ibar(1'b0));
endmodule

// Output buffer map
module \$__outpad (input I, output O);
   cycloneive_io_obuf _TECHMAP_REPLACE_ (.o(O), .i(I), .oe(1'b1));
endmodule

// LUT Map
/* 0 -> datac
 1 -> cin */
module \$lut (A, Y);
   parameter WIDTH  = 0;
   parameter LUT    = 0;
   input [WIDTH-1:0] A;
   output            Y;
   generate
      if (WIDTH == 1) begin
	 assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function
      end else
        if (WIDTH == 2) begin
           cycloneive_lcell_comb #(.lut_mask({4{LUT}}),
                                   .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y),
                                                                                .dataa(A[0]),
                                                                                .datab(A[1]),
                                                                                .datac(1'b1),
                                                                                .datad(1'b1));
        end else
          if(WIDTH == 3) begin
	     cycloneive_lcell_comb #(.lut_mask({2{LUT}}),
                                     .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y),
                                                                                  .dataa(A[0]),
                                                                                  .datab(A[1]),
                                                                                  .datac(A[2]),
                                                                                  .datad(1'b1));
          end else
            if(WIDTH == 4) begin
	       cycloneive_lcell_comb #(.lut_mask(LUT),
                                       .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y),
                                                                                    .dataa(A[0]),
                                                                                    .datab(A[1]),
                                                                                    .datac(A[2]),
                                                                                    .datad(A[3]));
            end else
	             wire _TECHMAP_FAIL_ = 1;
   endgenerate

endmodule
>) as fp: fixture_1 = fp.read() result = v([], 'a', 100) if cssutils: assert len(result[1]) == 0 else: assert len(result[1]) == 1 result = v([], fixture_1, 100) if cssutils: assert len(result[1]) > 1 else: assert len(result[1]) == 1 def test_view_hex(self): v = cv.ViewHex() assert v([], "foo", 1000) def test_view_image(self): v = cv.ViewImage() p = tutils.test_data.path("data/image.png") assert v([], file(p,"rb").read(), sys.maxint) p = tutils.test_data.path("data/image.gif") assert v([], file(p,"rb").read(), sys.maxint) p = tutils.test_data.path("data/image-err1.jpg") assert v([], file(p,"rb").read(), sys.maxint) p = tutils.test_data.path("data/image.ico") assert v([], file(p,"rb").read(), sys.maxint) assert not v([], "flibble", sys.maxint) def test_view_multipart(self): view = cv.ViewMultipart() v = """ --AaB03x Content-Disposition: form-data; name="submit-name" Larry --AaB03x """.strip() h = flow.ODictCaseless( [("Content-Type", "multipart/form-data; boundary=AaB03x")] ) assert view(h, v, 1000) h = flow.ODictCaseless() assert not view(h, v, 1000) h = flow.ODictCaseless( [("Content-Type", "multipart/form-data")] ) assert not view(h, v, 1000) h = flow.ODictCaseless( [("Content-Type", "unparseable")] ) assert not view(h, v, 1000) def test_get_content_view(self): r = cv.get_content_view( cv.get("Raw"), [["content-type", "application/json"]], "[1, 2, 3]", 1000, lambda x: None ) assert "Raw" in r[0] r = cv.get_content_view( cv.get("Auto"), [["content-type", "application/json"]], "[1, 2, 3]", 1000, lambda x: None ) assert r[0] == "JSON" r = cv.get_content_view( cv.get("Auto"), [["content-type", "application/json"]], "[1, 2", 1000, lambda x: None ) assert "Raw" in r[0] r = cv.get_content_view( cv.get("AMF"), [], "[1, 2", 1000, lambda x: None ) assert "Raw" in r[0] r = cv.get_content_view( cv.get("Auto"), [ ["content-type", "application/json"], ["content-encoding", "gzip"] ], encoding.encode('gzip', "[1, 2, 3]"), 1000, lambda x: None ) assert "decoded gzip" in r[0] assert "JSON" in r[0] r = cv.get_content_view( cv.get("XML"), [ ["content-type", "application/json"], ["content-encoding", "gzip"] ], encoding.encode('gzip', "[1, 2, 3]"), 1000, lambda x: None ) assert "decoded gzip" in r[0] assert "Raw" in r[0] if pyamf: def test_view_amf_request(): v = cv.ViewAMF() p = tutils.test_data.path("data/amf01") assert v([], file(p,"rb").read(), sys.maxint) p = tutils.test_data.path("data/amf02") assert v([], file(p,"rb").read(), sys.maxint) def test_view_amf_response(): v = cv.ViewAMF() p = tutils.test_data.path("data/amf03") assert v([], file(p,"rb").read(), sys.maxint) if cv.ViewProtobuf.is_available(): def test_view_protobuf_request(): v = cv.ViewProtobuf() p = tutils.test_data.path("data/protobuf01") content_type, output = v([], file(p,"rb").read(), sys.maxint) assert content_type == "Protobuf" assert output[0].text == '1: "3bbc333c-e61c-433b-819a-0b9a8cc103b8"' def test_get_by_shortcut(): assert cv.get_by_shortcut("h") def test_search_highlights(): # Default text in requests is content. We will search for nt once, and # expect the first bit to be highlighted. We will do it again and expect the # second to be. f = tutils.tflowview() f.search("nt") text_object = tutils.get_body_line(f.last_displayed_body, 0) assert text_object.get_text() == ('content', [(None, 2), (f.highlight_color, 2)]) f.search("nt") text_object = tutils.get_body_line(f.last_displayed_body, 1) assert text_object.get_text() == ('content', [(None, 5), (f.highlight_color, 2)]) def test_search_returns_useful_messages(): f = tutils.tflowview() # original string is content. this string should not be in there. response = f.search("oranges and other fruit.") assert response == "no matches for 'oranges and other fruit.'" def test_search_highlights_clears_prev(): f = tutils.tflowview(request_contents="this is string\nstring is string") f.search("string") text_object = tutils.get_body_line(f.last_displayed_body, 0) assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) # search again, it should not be highlighted again. f.search("string") text_object = tutils.get_body_line(f.last_displayed_body, 0) assert text_object.get_text() != ('this is string', [(None, 8), (f.highlight_color, 6)]) def test_search_highlights_multi_line(): f = tutils.tflowview(request_contents="this is string\nstring is string") # should highlight the first line. f.search("string") text_object = tutils.get_body_line(f.last_displayed_body, 0) assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) # should highlight second line, first appearance of string. f.search("string") text_object = tutils.get_body_line(f.last_displayed_body, 1) assert text_object.get_text() == ('string is string', [(None, 0), (f.highlight_color, 6)]) # should highlight third line, second appearance of string. f.search("string") text_object = tutils.get_body_line(f.last_displayed_body, 1) assert text_object.get_text() == ('string is string', [(None, 10), (f.highlight_color, 6)]) def test_search_loops(): f = tutils.tflowview(request_contents="this is string\nstring is string") # get to the end. f.search("string") f.search("string") f.search("string") # should highlight the first line. message = f.search("string") text_object = tutils.get_body_line(f.last_displayed_body, 0) assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) assert message == "search hit BOTTOM, continuing at TOP" def test_search_focuses(): f = tutils.tflowview(request_contents="this is string\nstring is string") # should highlight the first line. f.search("string") # should be focusing on the 2nd text line. f.search("string") text_object = tutils.get_body_line(f.last_displayed_body, 1) assert f.last_displayed_body.focus == text_object def test_search_does_not_crash_on_bad(): """ this used to crash, kept for reference. """ f = tutils.tflowview(request_contents="this is string\nstring is string\n"+("A" * cv.VIEW_CUTOFF)+"AFTERCUTOFF") f.search("AFTERCUTOFF") # pretend F f.state.add_flow_setting( f.flow, (f.state.view_flow_mode, "fullcontents"), True ) f.master.refresh_flow(f.flow) # text changed, now this string will exist. can happen when user presses F # for full text view f.search("AFTERCUTOFF")