📄 serials_3l.tdf
字号:
-- serials_3L.tdf-- for frame serials of 3 levels -- Chai Lin-- 2006-08-27include "fran_pg.inc";include "lpm_counter.inc";include "lpm_compare.inc";SUBDESIGN serials_3L( clk : INPUT; clk_en : INPUT; reset : INPUT; time0[7..0] : INPUT; time1[7..0] : INPUT; time2[7..0] : INPUT; time3[7..0] : INPUT; red_in0[9..0] : INPUT; green_in0[9..0] : INPUT; blue_in0[9..0] : INPUT; red_in1[9..0] : INPUT; green_in1[9..0] : INPUT; blue_in1[9..0] : INPUT; red_in2[9..0] : INPUT; green_in2[9..0] : INPUT; blue_in2[9..0] : INPUT; red_out[9..0] : OUTPUT; green_out[9..0] : OUTPUT; blue_out[9..0] : OUTPUT; trigger_out : OUTPUT;)VARIABLE counter0, counter1, counter2, counter3 : lpm_counter WITH ( LPM_WIDTH = 8, LPM_DIRECTION = "UP" ); compare0, compare1, compare2, compare3 : lpm_compare WITH ( LPM_WIDTH = 8, ONE_INPUT_IS_CONSTANT = "YES", LPM_REPRESENTATION = "UNSIGNED", LPM_PIPELINE = 2 ); SS : MACHINE OF BITS (phase[3..0]) WITH STATES( idle = B"0001", s1 = B"0010", s2 = B"0100", s3 = B"1000" ); Red_dff[9..0] : DFF; Green_dff[9..0] : DFF; Blue_dff[9..0] : DFF; trigger_dffe : DFFE; RedValue[9..0] : NODE; GreValue[9..0] : NODE; BluValue[9..0] : NODE; tri_flag : NODE;BEGIN SS.clk = clk; SS.ena = clk_en; SS.reset = reset; counter0.clock = clk; counter1.clock = clk; counter2.clock = clk; counter3.clock = clk; counter0.clk_en = clk_en; counter1.clk_en = clk_en; counter2.clk_en = clk_en; counter3.clk_en = clk_en; counter0.cnt_en = idle; counter1.cnt_en = s1; counter2.cnt_en = s2; counter3.cnt_en = s3; compare0.clock = clk; compare1.clock = clk; compare2.clock = clk; compare3.clock = clk; compare0.dataa[] = counter0.q[]; compare0.datab[] = time0[]; compare1.dataa[] = counter1.q[]; compare1.datab[] = time1[]; compare2.dataa[] = counter2.q[]; compare2.datab[] = time2[]; compare3.dataa[] = counter3.q[]; compare3.datab[] = time3[]; CASE SS IS WHEN idle => IF compare0.aeb THEN counter0.sclr = VCC; SS = s1; ELSE SS = idle; counter0.sclr = GND; END IF; WHEN s1 => IF compare1.aeb THEN counter1.sclr = VCC; SS = s2; ELSE SS = s1; counter1.sclr = GND; END IF; WHEN s2 => IF compare2.aeb THEN counter2.sclr = VCC; SS = s3; ELSE SS = s2; counter2.sclr = GND; END IF; WHEN s3 => IF compare3.aeb THEN counter3.sclr = VCC; SS = s1; ELSE SS = s3; counter3.sclr = GND; END IF; WHEN OTHERS => SS = idle; END CASE; CASE SS IS WHEN idle => RedValue[9..0] = 0; GreValue[9..0] = 0; BluValue[9..0] = 0; tri_flag = GND; WHEN s1 => RedValue[9..0] = red_in0[9..0]; GreValue[9..0] = green_in0[9..0]; BluValue[9..0] = blue_in0[9..0]; tri_flag = VCC; WHEN s2 => RedValue[9..0] = red_in1[9..0]; GreValue[9..0] = green_in1[9..0]; BluValue[9..0] = blue_in1[9..0]; tri_flag = GND; WHEN s3 => RedValue[9..0] = red_in2[9..0]; GreValue[9..0] = green_in2[9..0]; BluValue[9..0] = blue_in2[9..0]; tri_flag = GND; WHEN OTHERS => RedValue[9..0] = 0; GreValue[9..0] = 0; BluValue[9..0] = 0; tri_flag = GND; END CASE; Red_dff[].clk = clk; Green_dff[].clk = clk; Blue_dff[].clk = clk; Red_dff[].d = RedValue[]; Green_dff[].d = GreValue[]; Blue_dff[].d = BluValue[]; Red_out[] = Red_dff[].q; Green_out[] = Green_dff[].q; Blue_out[] = Blue_dff[].q; trigger_dffe.clk = clk; trigger_dffe.ena = clk_en; trigger_dffe.d = tri_flag; trigger_out = trigger_dffe.q ; END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -