Compare commits
2
Commits
f50639e90f
...
df7b3aee6d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
df7b3aee6d | ||
|
|
4e3525ffe2 |
@@ -135,8 +135,16 @@ module cpu21_board_top #(
|
|||||||
wire [15:0] sw_vec = {12'b0, sw_flag, irq_sw};
|
wire [15:0] sw_vec = {12'b0, sw_flag, irq_sw};
|
||||||
// 中断连线:SW0 与鼠标共用一个入口,SW1 与"关卡入口"共用一个入口。
|
// 中断连线:SW0 与鼠标共用一个入口,SW1 与"关卡入口"共用一个入口。
|
||||||
wire [ 2:0] irq_vec = {irq_sw[2], (level_irq | irq_sw[1]), (mouse_irq | irq_sw[0])};
|
wire [ 2:0] irq_vec = {irq_sw[2], (level_irq | irq_sw[1]), (mouse_irq | irq_sw[0])};
|
||||||
for (i = 0; i < ROM_WORDS; i = i + 1)
|
|
||||||
rom[i] = 32'h0000_0013; // NOP 填充
|
// ---------------------------------------------------------------------------
|
||||||
|
// 指令 ROM:组合读(未用到的地址填 NOP)
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
reg [31:0] rom [0:ROM_WORDS-1];
|
||||||
|
integer i;
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
for (i = 0; i < ROM_WORDS; i = i + 1)
|
||||||
|
rom[i] = 32'h0000_0013; // NOP 填充
|
||||||
`ifdef SAOLEI_ROM
|
`ifdef SAOLEI_ROM
|
||||||
// 扫雷程序(由 saolei/tools/build.ps1 生成的 cpu21_saolei_rom.vh)。
|
// 扫雷程序(由 saolei/tools/build.ps1 生成的 cpu21_saolei_rom.vh)。
|
||||||
// 综合/仿真时定义宏 SAOLEI_ROM 即可切换到这个程序;不定义就是下面的跑马灯。
|
// 综合/仿真时定义宏 SAOLEI_ROM 即可切换到这个程序;不定义就是下面的跑马灯。
|
||||||
@@ -305,8 +313,7 @@ cpu21_vga u_vga (
|
|||||||
.vga_r (vga_r),
|
.vga_r (vga_r),
|
||||||
.vga_g (vga_g),
|
.vga_g (vga_g),
|
||||||
.vga_b (vga_b),
|
.vga_b (vga_b),
|
||||||
Tcl 一键重建
|
.vga_hs (vga_hs),
|
||||||
ga_hs (vga_hs),
|
|
||||||
.vga_vs (vga_vs),
|
.vga_vs (vga_vs),
|
||||||
.frame_tick_o(frame_tick)
|
.frame_tick_o(frame_tick)
|
||||||
);
|
);
|
||||||
@@ -337,7 +344,8 @@ generate
|
|||||||
.ps2_clk_oe_o (),
|
.ps2_clk_oe_o (),
|
||||||
.ps2_data_i (ps2_data),
|
.ps2_data_i (ps2_data),
|
||||||
.ps2_data_oe_o(),
|
.ps2_data_oe_o(),
|
||||||
.ev_valid_o (ev_valid),
|
Tcl 一键重建
|
||||||
|
valid_o (ev_valid),
|
||||||
.ev_dx_o (ev_dx),
|
.ev_dx_o (ev_dx),
|
||||||
.ev_dy_o (ev_dy),
|
.ev_dy_o (ev_dy),
|
||||||
.ev_btn_o (ev_btn),
|
.ev_btn_o (ev_btn),
|
||||||
|
|||||||
@@ -103,4 +103,3 @@ module cpu21_pointer #(
|
|||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
`default_nettype wire
|
`default_nettype wire
|
||||||
Tcl 一键重建
|
|
||||||
|
|||||||
@@ -39,12 +39,12 @@ module cpu21_ps2_mouse (
|
|||||||
output reg [15:0] rx_count_o
|
output reg [15:0] rx_count_o
|
||||||
);
|
);
|
||||||
|
|
||||||
// 开漏:oe = 1 时把线拉低,否则高阻(外部上拉)
|
// 开漏:oe = 1 时把线拉低,否则高阻(外部上拉)。本模块只接收,两条线都不驱动。
|
||||||
assign ps2_clk_oe_o = 1'b0; // 本设计只接收,不主动拉低时钟(除了初始化)
|
assign ps2_clk_oe_o = 1'b0;
|
||||||
assign ps2_data_oe_o = init_oe;
|
assign ps2_data_oe_o = 1'b0;
|
||||||
。本模块只接收,两条线都不驱动。
|
|
||||||
assign ps2_clk_oe_o = 1'b0;
|
// 两级同步
|
||||||
assign ps2_data_oe_o = 1'b02_data_s1, ps2_data_s2;
|
reg ps2_clk_s1, ps2_clk_s2, ps2_data_s1, ps2_data_s2;
|
||||||
always @(posedge clk or posedge reset) begin
|
always @(posedge clk or posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
ps2_clk_s1 <= 1'b1;
|
ps2_clk_s1 <= 1'b1;
|
||||||
@@ -142,4 +142,3 @@ module cpu21_ps2_mouse (
|
|||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
`default_nettype wire
|
`default_nettype wire
|
||||||
Tcl 一键重建
|
|
||||||
|
|||||||
@@ -239,4 +239,3 @@ module cpu21_vga #(
|
|||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
`default_nettype wire
|
`default_nettype wire
|
||||||
Tcl 一键重建
|
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
# =============================================================================
|
||||||
|
# check_rtl_text.ps1 —— detect stray non-Verilog text in the RTL sources.
|
||||||
|
#
|
||||||
|
# WHY: this project's .v files were twice corrupted by a text tool that inserted a
|
||||||
|
# line of README prose into them ("Tcl ..." / a Chinese sentence), which made
|
||||||
|
# Vivado fail with
|
||||||
|
# ERROR: [Synth 8-2715] syntax error near "..." 'non-printable character 0xe4'
|
||||||
|
# and produced a cascade of bogus errors in the included ROM .vh. Running this
|
||||||
|
# script takes a second and catches it before spending a synthesis run.
|
||||||
|
#
|
||||||
|
# WHAT IT CHECKS
|
||||||
|
# 1) a line inside .v/.vh/.xdc that has non-ASCII characters *outside* a comment
|
||||||
|
# (i.e. real code position) -> corruption;
|
||||||
|
# 2) a line that looks like pasted prose/markdown (leading "|", "**", or a line
|
||||||
|
# that is bare text after `endmodule`).
|
||||||
|
#
|
||||||
|
# USAGE (from the repository root or from pipelined-cpu/):
|
||||||
|
# powershell -ExecutionPolicy Bypass -File pipelined-cpu\tools\check_rtl_text.ps1
|
||||||
|
# Exit code 0 = clean, 1 = found something.
|
||||||
|
# =============================================================================
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
$srcs = Join-Path (Split-Path -Parent $PSScriptRoot) 'srcs'
|
||||||
|
if (-not (Test-Path $srcs)) { Write-Output "ERROR: cannot find $srcs"; exit 2 }
|
||||||
|
|
||||||
|
$bad = 0
|
||||||
|
$files = Get-ChildItem -Recurse -Path $srcs -Include *.v, *.vh, *.xdc -File
|
||||||
|
|
||||||
|
foreach ($f in $files) {
|
||||||
|
$rel = $f.FullName.Substring($srcs.Length).TrimStart('\', '/')
|
||||||
|
$lines = @(Get-Content -LiteralPath $f.FullName)
|
||||||
|
$inBlockComment = $false
|
||||||
|
|
||||||
|
for ($i = 0; $i -lt $lines.Count; $i++) {
|
||||||
|
$line = $lines[$i]
|
||||||
|
$lineNo = $i + 1
|
||||||
|
|
||||||
|
# ---- strip comments so we only look at code positions ----
|
||||||
|
$code = $line
|
||||||
|
if ($f.Extension -eq '.xdc') {
|
||||||
|
$h = $code.IndexOf('#'); if ($h -ge 0) { $code = $code.Substring(0, $h) }
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$c = $code.IndexOf('//'); if ($c -ge 0) { $code = $code.Substring(0, $c) }
|
||||||
|
if ($inBlockComment) { $code = '' }
|
||||||
|
if ($line -match '/\*') { $inBlockComment = $true }
|
||||||
|
if ($line -match '\*/') { $inBlockComment = $false }
|
||||||
|
}
|
||||||
|
|
||||||
|
$trim = $line.Trim()
|
||||||
|
|
||||||
|
# ---- check 1: non-ASCII in code position ----
|
||||||
|
if ($code -match '[^\x00-\x7F]') {
|
||||||
|
Write-Output ("!! $rel`:$lineNo non-ASCII text in code position:")
|
||||||
|
Write-Output (" " + $trim)
|
||||||
|
$bad++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---- check 2: pasted prose / markdown leftovers ----
|
||||||
|
if ($trim -match '^\||^\*\*|^#[^0-9#]' -and $f.Extension -ne '.xdc') {
|
||||||
|
Write-Output ("!! $rel`:$lineNo looks like pasted prose:")
|
||||||
|
Write-Output (" " + $trim)
|
||||||
|
$bad++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output ""
|
||||||
|
Write-Output ("scanned " + $files.Count + " files under srcs/")
|
||||||
|
if ($bad -eq 0) {
|
||||||
|
Write-Output "RTL text check: OK (no stray non-Verilog text found)."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
Write-Output ("RTL text check: FAILED, " + $bad + " suspicious line(s) - fix them before synthesis.")
|
||||||
|
Write-Output "Hint: such lines are usually injected by an editor/tool; remove them, then re-run this script."
|
||||||
|
exit 1
|
||||||
Reference in New Issue
Block a user